1

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

我想打印一个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 似乎可以正常工作,但我可能是错的。

任何输入或帮助将不胜感激。

4

1 回答 1

1

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

维基百科:字体

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

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

真的有两种选择:

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