我需要将一些固定宽度的字体(即Courier New或Consolas)文本写入Paint事件中的.net Winforms窗口 - 不使用标签或任何其他winforms控件 - 而是使用图形对象方法来渲染文本到表单的客户区域。
我很难在标题下的不同行上对齐文本,即使它是固定宽度字体。如何精确测量固定宽度字体中单个字符的宽度?如何在连续的文本输出调用中获得2行水平对齐打印?
例如:
Heading 1 Heading 2
Short Other text A bit longer Still aligned?
我需要一个单独的调用来渲染标题2下的每个文本单元格。为了参数的缘故 - 让我们说第1列项目用黑色打印而第2列用蓝色打印 - 我们不能使用相同的文本输出调用整条线。
答案 0 :(得分:2)
Graphics.MeasureString
可能就是您要找的。 p>
答案 1 :(得分:1)
好的,这里的代码按照我想要的方式使用MeasureString。字符串打印两次。一次使用一次调用DrawString。第二次,循环中逐个字符。我需要的是2个字符串应该看起来相同但是在绘制第二个字符串时我无法获得每个字符的正确水平位置。您可以将此代码放入表单的Paint事件中进行试用(将表单字体设置为Consolas或其他固定宽度字体):
Dim i As Single Dim sf As StringFormat Dim String1 As String = "Here is out test string" Dim CharSizeF As SizeF sf = StringFormat.GenericTypographic CharSizeF = e.Graphics.MeasureString(String1, Me.Font, 10000, sf) CharSizeF.Width /= String1.Length e.Graphics.DrawString(String1, Me.Font, Brushes.Black, 0, 0, sf) For Each c As Char In String1 e.Graphics.DrawString(c.ToString, Me.Font, Brushes.Black, i * CharSizeF.Width, CharSizeF.Height, sf) i += 1 Next
微软也帮助:
http://msdn.microsoft.com/en-us/library/957webty.aspx 获取适合布局中相邻字符串的度量标准(例如,实现时) 格式化文本),使用MeasureCharacterRanges方法或其中一个MeasureString方法 获取StringFormat并传递GenericTypographic。还要确保TextRenderingHint 图形是AntiAlias。