1

我有代码,类似于以下内容:

string myText = "This is a test";
Font myFont = new Font("Arial", 10);
Rectangle rect = new Rectangle(10,10,100,100);
Graphics g = e.Graphics;
g.DrawString(myText, myFont, rect.X, rect.Y);

虽然这可行,但我想做的是让文本在矩形的尺寸内垂直和水平居中。另外,如果可能的话,如果文本太大而不能放在一行上,我想换行。如何在 C#/GDI+ 中执行此操作?

4

2 回答 2

2

我会使用其中一个需要你必须检查文本长度DrawString的重载,以 确保它适合并自己包装。进一步看它有一个 NoWrap 标志,暗示默认是换行:StringFormat MeasureStringStringFormatFlags

从最后一个链接:

禁用矩形内格式化时行之间的文本换行。当传递一个点而不是一个矩形时,或者当指定的矩形的线长为零时,这个标志是隐含的。

于 2012-11-19T22:02:28.060 回答
0

简单,未经研究的方法:

自动换行将你的字符串分解成更小的子字符串。IE

"this is"
"a test"

您可以使用该String.Split()方法将字符串拆分为单词,然后将单词附加在一起,直到您的字符串达到某个阈值。然后制作一个新字符串。

至于居中,您可以用空格填充各个字符串。对于垂直居中,您可以在字符串的开头添加一些换行符。

我将把涉及的算术留给你。它不应该那么难。

于 2012-11-19T22:01:55.813 回答