2012-06-23 98 views
3

我想完成一个代码,可以在屏幕上布局文本。放置在否则为空Windows窗体的Paint事件处理程序下面的C#代码是一个例子:GDI + MeasureString()不正确地修剪文本

string[] s = new string[] { "Sample text ", "to test", " this layout ", "algorithm" }; 
PointF[] pts = new PointF[s.Length]; 
PointF start = new PointF(10, 10); 
StringFormat f = new StringFormat(StringFormat.GenericTypographic); 
float x = start.X; 
float y = start.Y; 
for (int i = 0; i < pts.Length; i++) 
{ 
    pts[i] = new PointF(x, y); 
    SizeF sz = e.Graphics.MeasureString(s[i], Font, pts[i], f); 
    x += sz.Width; 
    e.Graphics.DrawString(s[i], Font, Brushes.Black, pts[i]); 
} 

它正常工作,除了前和s阵列中的每个文本片段后修整空格。它应该像这样显示:

示例文本来测试这个布局算法

但相反,它似乎是这样的:

样品文本到testthis layoutalgorithm

我有确认f.Trimming属性设置为None。我会猜想这会给字符串的测量增加尾随和开放的空白,但它仍然会修剪它。有关如何使MeasureString方法包含空白的任何想法?除此之外,完全可以处理。

回答

14
StringFormat f = new StringFormat(StringFormat.GenericTypographic) 
        { FormatFlags = StringFormatFlags.MeasureTrailingSpaces }; 
+0

完美!这正是我需要的。谢谢。 – user1476997