【问题标题】:Formatting text with padding does not line up in C#使用填充格式化文本在 C# 中不对齐
【发布时间】:2016-01-28 20:02:03
【问题描述】:

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

查看输出:

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

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

【问题讨论】:

  • 您的问题是kerning。将您的文本更改为monospaced 字体(其中所有字符的宽度相同)或使用具有实际列的控件而不是尝试匹配填充。 Consolas 是 Visual Studio 中的默认字体,例如是等宽字体。
  • 尝试使用 Courier New 字体。
  • 看起来它最有可能是你使用的字体,看看我比M大多少。
  • 你能发布你到目前为止的代码吗?
  • 你在使用 WPF 吗?还是 WinForms?在 WPF 中,您可以使用 DataGrid 在带有列的表中显示数据(将正确对齐)。

标签: c# padding


【解决方案1】:

注意:其中一位 cmets 提出了一个重要问题,即该问题是指 System.Windows.Forms.RichTextBox (WinForms) 还是 System.Windows.Controls.RichTextBox (WPF) 控件。此答案适用于RichTextBox 的 WinForms 版本,因此如果您使用的是 WPF,则此答案不适用。

最重要的事情(在 cmets 中提到)是您需要使用 Monospaced font

由于您声明您使用的是RichTextBox,您需要知道如何设置它以使用您选择的任何等宽字体。

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

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

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

完成后,剩下的就是在每个字符串的末尾添加适当数量的空白,这样下一条数据就会出现在适当的位置。您可能会使用String.PadRight,但有关填充字符串的更多一般信息,请查看这篇 MSDN 文章:Padding Strings in the .NET Framework

【讨论】:

  • 这很容易解决。谢谢你的解释!
【解决方案2】:

这里是字符串格式化示例:

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] }

【讨论】:

  • 其实我也在寻找有关 String.Format 的解释,非常感谢!
猜你喜欢
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多