2012-08-14 33 views
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看来,当你在实际的字符不是空格传递正常工作,但我可能是错的。

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

+0

不会使用单元格对齐会更好吗?当使用像Arial这样的可变宽度字体时,它永远不会看起来很正确。如果你解释你想要完成的事情,这可能会有所帮助。可能有更好的方法去做。 – LarsTech 2012-08-14 15:56:44

+0

@LarsTech我想打印datagridview表,我正在使用PrintDocument来做到这一点。它的工作原理除了我无法对齐文本和列标题。 – ThN 2012-08-14 16:01:55

+0

'打印一个datagridview' - 错过了那一行。然后您可能需要添加一些打印代码。我会尝试将每列转换为打印页上的矩形,然后将对齐格式应用于DrawString函数。 – LarsTech 2012-08-14 16:09:43

回答

1

使用比例字体时,每个字符宽度之间存在差异。 Arial与我们通常使用的大多数字体一样是比例字体。

Wikipedia: Typeface

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

这是什么意思是每个字母都可以是不同的。空格确实有一个宽度,但不一定要与字母“i”或字母“w”相同。

实际上有两个选择:

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

马克,你的建议工作。我没有使用PadRight或PadLeft并使用等宽字体Courier New。我可以通过在字符串末尾添加空格来将所有文本对齐到它们的列标题。谢谢。如果没有像Stackoverflow这样的网站,天哪我不知道我会在哪里。 Stackoverflow在帮助我理解和解决.Net编程问题和项目方面非常有帮助。谢谢, – ThN 2012-08-14 19:22:03