【问题标题】:Does white space have width at all?空白是否有宽度?
【发布时间】:2012-08-14 15:42:26
【问题描述】:

当谈到空白时,我太困惑了。我正在尝试调整字符串,但它不会与我合作。

我想打印一个datagridview,所以我有列标题,下面是实际行。无论我如何尝试确定填充字符串的确切长度或宽度,它要么太短要么太长。因此,在发送到打印机之前,我无法将值与列标题对齐。

如果我只是执行以下操作:

thestring := '.NET is cool';
thestring := thestring.padright(100); //thestring = too short = '.NET is cool    '

如果我这样做:

var tmpstr := '=';
tmpstr := tmpstr.PadRight(15); //total length of characters is 15
var swidth := int32(ev.Graphics.Measurestring(tmpstr,new Font('Arial',9)).Width);

thestring := '.NET is cool';
thestring := theString.padright(swidth); //thestring = too long = '.NET is cool   

                '

当您传入实际字符而不是空格时,PadRight 或 PadLeft 似乎可以正常工作,但我可能是错的。

任何意见或帮助将不胜感激。

【问题讨论】:

  • 使用单元格对齐不是更好吗?当使用像 Arial 这样的可变宽度字体时,它永远不会看起来很正确。如果您解释您要完成的工作,可能会有所帮助。可能有更好的方法来解决它。
  • @LarsTech 我正在尝试打印 datagridview 表,我正在使用 PrintDocument 来执行此操作。它可以工作,但我无法对齐文本和列标题。
  • print a datagridview — 错过了那条线。然后您可能想要添加一些打印代码。我会尝试在打印纸上将每一列变成一个矩形,然后将对齐格式应用于 DrawString 函数。

标签: .net string whitespace padding delphi-prism


【解决方案1】:

使用比例字体时,每个字符的宽度会有所不同。 Arial 是一种比例字体,与我们通常使用的大多数字体一样。

Wikipedia: Typeface

比例字体包含不同宽度的字形,而 等宽(非比例或固定宽度)字体使用单个 字体中所有字形的标准宽度。

这意味着每个字母都可能不同。空格确实有宽度,但不必与字母“i”或字母“w”相同。

其实有两种选择:

  1. 您可以使用等宽字体,例如 Courier New。这将允许您使用空格根据字母数排列字符。
  2. 使用像素对齐。在这种情况下,您需要测量文本宽度并移动文本输出命令的起始位置,以便项目彼此对齐。您实际上计算了所需的空白,然后移动到该位置而不是填充字符串。

【讨论】:

  • 马克,你的建议奏效了。我没有使用 PadRight 或 PadLeft,而是使用了等宽字体 Courier New。只需在字符串末尾添加空格,我就可以将所有文本与其列标题对齐。谢谢你。天哪,如果没有像 Stackoverflow 这样的网站,我不知道我会在哪里。 Stackoverflow 在帮助我理解和解决 .Net 编程问题和项目方面非常有帮助。谢谢,
猜你喜欢
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多