Windows窗体动态调整文本大小以适合矩形

时间:2011-05-24 10:04:55

标签: .net winforms fonts drawstring

使用Windows表单,我有rectangle,其中我想使用Graphics.DrawString在其中绘制一些文本。我想要做的是创建尽可能大的字体,同时保持文本在矩形的边界内,只将文本包装到单词之间的下一行。

e.g。

Not acceptable       Acceptable

   +-------+         +--------+
   | dotne |         |        |
   |   t   |         | dotnet |
   | rocks |         |  rocks |
   +-------+         +--------+

在半伪代码中,这就是我的想法

string text = "This is some Text";
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
RectangleF rect = new RectangleF(0,0,100,100);
float maxFontSize = 10F;
float minFontSize = 6F;
float fontSize = maxFontSize;
Font font = new Font(fontFamily, fontSize);
bool found = false;
do
{
    font = new Font(fontFamily, fontSize);
    if TextFitsWithinBounds(text, font, rect, sf)
        found = true;
    else
        fontSize -= 0.1F;
} while (found == false && fontSize > minFontSize)
Graphics.DrawString(text, font, Brushes.Black, rect, sf);

我正在寻找的是一种实现TextFitsWithinBounds()的方法。框架中的任何一个类都可以帮助我实现这个目标吗?

MeasureString接近,但似乎不允许我指定边界。

1 个答案:

答案 0 :(得分:1)

图形对象具有.MeasureString()成员,从而产生绘制文本的大小。