Windows Forms динамически изменяет размер текста, чтобы соответствовать прямоугольнику - PullRequest
0 голосов
/ 24 мая 2011

Используя формы Windows, у меня есть прямоугольник , в котором я хочу нарисовать текст внутри, используя Graphics.DrawString.Что я хочу сделать, так это создать шрифт как можно большего размера, сохраняя при этом текст в границах прямоугольника и только перенос текста на следующую строку между словами.

например

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 Ответ

1 голос
/ 24 мая 2011

Графический объект имеет .MeasureString() член, что приводит к размеру нарисованного текста.

...