Graphics.Drawstring WordWrap不是预期的

时间:2017-04-25 09:28:10

标签: c# .net visual-studio

在我的结算应用程序中,使用Graphics.DrawString方法等打印帐单。当使用带有自动换行的Graphics.DrawString绘制ItemName时,它会将单词包装成多行。所以消耗了很多行。

我使用简单的代码重新创建了问题。使用此代码,我期望输出如下图: Expected Output designed using MS Paint

这是我的示例代码。

 string FONTNAME = "Tahoma";
 text = "C# is a simple, modern, general-purpose, object-oriented programming language";
 e.Graphics.DrawString(text, new Font(FONTNAME, 12, FontStyle.Bold), drawBrush, new RectangleF(0, 0, 100.0F, 200F), new StringFormat());
 e.Graphics.DrawRectangle(new System.Drawing.Pen(drawBrush), 0, 0, 100.0F, 200F);

但我得到以下输出: Output Image

有没有选项来打破单词而不是自动换行?

1 个答案:

答案 0 :(得分:1)

不,Graphics.DrawString没有任何选项可以打破字符(而不是整个单词)。

要控制换行,您可以传递使用StringFormat初始化的StringFormatFlags对象。唯一相关的标志是StringFormatFlags.NoWrap。 .NET文档并不是很有用,但是如果我们查看GDI+ documentation(它是底层库),我们会看到:

  

<强> StringFormatFlagsNoWrap

     

指定禁用将文本换行到下一行。 ...在矩形内绘制文本时,默认情况下,文本在矩形边界内的最后一个单词边界处被破坏并包裹到下一行。

因此,唯一的选择是在字边界处包装,或根本不执行包装。

要获得所需的输出,您需要逐个字符地测量并绘制多个字符串(每行一个)。