测量包裹的字符串

hai*_*yyu 5 c# gdi+ word-wrap winforms

我正在尝试创建一个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);
Run Code Online (Sandbox Code Playgroud)

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

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

Sam*_*lgh 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);
Run Code Online (Sandbox Code Playgroud)

  • 它引用文档"宽度参数指定返回的SizeF结构的宽度组件的最大值(宽度).如果width参数小于字符串的实际宽度,则返回的Width组件被截断为表示适合指定宽度的最大字符数的值.要容纳整个字符串,返回的Height组件将调整为允许显示带字符换行的字符串的值.http://msdn.microsoft.com/en-us/library/9bt8ty58.aspx (5认同)