使用填充格式化文本在 C# 中不对齐

Formatting text with padding does not line up in C#

我对编程还很陌生,我刚刚用 C# .NET 编写了一个简单的应用程序来检索有关系统驱动器的信息 space。该程序运行良好,但我正在努力格式化输出。

查看输出:

我正在尝试使用填充使文本在富文本框中以某种列格式排列,但输出没有排列,因为如果有多个驱动器,驱动器名称是不同的抛出填充的长度。即使盘符返回一个为 M: 另一个为 I: 字母大小的差异足以在填充时摆脱对齐。

我想知道是否有一种方法可以将每个字符串值强制为特定长度,以便均匀地应用填充,或者是否有更好的方法来格式化我的输出。预先感谢您抽出宝贵时间,如果有任何进一步的信息对您有帮助,请告诉我!

注意:其中一条评论问了一个重要的问题,关于这个问题是否指的是System.Windows.Forms.RichTextBox (WinForms) or the System.Windows.Controls.RichTextBox (WPF)控件。此答案 适用于 RichTextBox 的 WinForms 版本,因此如果您使用的是 WPF,则此答案不适用。

最重要的是,评论中提到了这一点,即您需要使用 Monospaced font

既然你说你正在使用 RichTextBox,你需要知道如何设置它以使用你选择的任何等宽字体。

为此,您可以使用 RichTextBox.SelectionFont 属性。

有关更一般的说明,请参阅这篇 MSDN 文章:Setting Font Attributes for the Windows Forms RichTextBox Control

设置 RichTextBox.SelectionFont 属性 后,只有 之后 添加到控件的文本才会使用指定的字体。要将字体应用于 现有 文本(即填充 RichTextBox 然后将字体更改为适当的等宽字体),请查看 this answer,其中准确地告诉你该怎么做。

完成后,剩下的就是在每个字符串的末尾添加适当数量的空格,以便下一条数据出现在适当的位置。您可能会使用 String.PadRight, but for more general information about padding strings, check out this MSDN article: Padding Strings in the .NET Framework

这是字符串格式化示例:

string varOne = "Line One";
double varTwo = 15/100;

string output= String.Format("{0,-10} {1,5:P1}", varOne, varTwo);

//expected output is
//Line One   15 %

大括号中的格式属性是: {index[alignment][:formatString] }