2012-06-23 100 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