测量包裹的字符串

时间:2012-02-02 21:52:19

标签: c# winforms gdi+ word-wrap

我正在尝试创建一个Control,它基本上允许我在另一个下面绘制不同的字符串。 但是,字符串的宽度可能不会大于控件的宽度。 为了解决这个问题,我想将RectangleF对象传递给Graphics.DrawString方法。这将包裹比传递的矩形宽度更宽的字符串。虽然这确实解决了如果它太大而无法看到整个字符串的问题,但还有另一个问题。如果我要尝试这样的事情

Graphics g = e.Graphics; // Paint event
g.DrawString(someText, someFont, someBrush, new PointF(0, 0), someRectangleF);
g.DrawString(someMoreText, someFont, someBrush, new PointF(0, 12), someRectangleF);

问题是如果someText被包装,第三行将在第一个文本上绘制文本,从而使得很难/不可能被阅读。

我正在寻找这个问题的解决方案,我发现了一些有趣的链接,但是包括使用for循环来测量每个角色的宽度等等。 有没有更简单的方法呢?

1 个答案:

答案 0 :(得分:7)

您可以使用Graphics.MeasureString方法获取字符串的尺寸并相应地绘制下一个字符串吗?

SizeF size = g.MeasureString(someText, someFont, someRectangleF.Size.Width);
g.DrawString(someText, someFont, someBrush, new PointF(0, 0), someRectangleF);
g.DrawString(someMoreText, someFont, someBrush, new PointF(0, size.Height), someRectangleF);
相关问题