3

我正在尝试完成一个可以在屏幕上布局文本的代码。以下 C# 代码放置在Paint原本为空的 Windows 窗体的事件处理程序中就是一个示例:

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除了修剪数组中每段文本之前和之后的空白之外,它可以正常工作。它应该显示如下:

测试此布局算法的示例文本

但相反,它看起来像这样:

用于测试此布局算法的示例文本

我已确认该f.Trimming属性设置为None. 我猜想这会在字符串的度量中添加尾随和开头的空格,但它仍然会修剪它。关于如何制作该MeasureString方法的任何想法包括空格?否则,字距调整处理得很好。

4

1 回答 1

14
StringFormat f = new StringFormat(StringFormat.GenericTypographic)
                     { FormatFlags = StringFormatFlags.MeasureTrailingSpaces };
于 2012-06-23T15:55:54.017 回答