C# 图形。Drawstring文字换行符不符合预期

C# 图形。Drawstring文字换行符不符合预期,c#,.net,visual-studio,C#,.net,Visual Studio,在我的计费应用程序中,使用Graphics.DrawString方法等打印账单。当使用Graphics.DrawString和word wrap绘制项目名称时,它会将单词包装成许多行。所以它消耗了很多行 我用简单的代码重新创建了这个问题。有了这段代码,我希望输出如下图所示: 这是我的示例代码 string FONTNAME = "Tahoma"; text = "C# is a simple, modern, general-purpose, object-oriented program

在我的计费应用程序中,使用Graphics.DrawString方法等打印账单。当使用Graphics.DrawString和word wrap绘制项目名称时,它会将单词包装成许多行。所以它消耗了很多行

我用简单的代码重新创建了这个问题。有了这段代码,我希望输出如下图所示:

这是我的示例代码

 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);
但我得到了以下输出:


是否有任何选项可以打断单词而不是换行?

否,
图形。DrawString
没有任何选项可以打断字符(相对于整个单词)

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

StringFormatFlagsNoWrap

指定禁用将文本换行到下一行…在矩形内绘制文本时,默认情况下,文本在矩形边界内的最后一个单词边界处断开,并换行到下一行

因此,唯一的选择是在单词边界换行,或者根本不执行换行


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

预期的输出错误。我的问题是,有没有任何方法可以打破这个单词呢?不管你怎么称呼第一个版本,它绝对不是单词包装。画这样的东西似乎没有什么意义,没有用户会欣赏它。如果必须这样做,那么就完全可以使用Graphics.MeasureString()来找出每一行可以容纳哪些内容。@HansPassant:您能帮我提供一个示例代码吗?相关的(代码有效)感谢您的回复@BradleyGrainger。现在,我通过用点(.)替换字符串中的所有空格来获得结果。