Размер шрифта для соответствия метке в C#
Следующий метод SizeLabelFont показывает, как размер шрифта соответствует тексту Label. Он дает Label самый большой возможный шрифт, сохраняя при этом его текст.
// Скопируем этот текст в ярлык, используя
// самый большой шрифт, который будет соответствовать.
private void SizeLabelFont(Label lbl)
{
// Только беспокоиться, если есть текст.
string txt = lbl.Text;
if (txt.Length > 0)
{
int best_size = 100;
// Посмотрим, сколько у нас есть комнаты, позволяя немного
// для внутреннего поля метки.
int wid = lbl.DisplayRectangle.Width - 3;
int hgt = lbl.DisplayRectangle.Height - 3;
// Создаем объект Graphics для измерения текста.
using (Graphics gr = lbl.CreateGraphics())
{
for (int i = 1; i <= 100; i++)
{
using (Font test_font =
new Font(lbl.Font.FontFamily, i))
{
// Посмотрим, сколько места текст
// требуется, указав максимальную ширину.
SizeF text_size =
gr.MeasureString(txt, test_font);
if ((text_size.Width > wid) ||
(text_size.Height > hgt))
{
best_size = i - 1;
break;
}
}
}
}
// Используйте этот размер шрифта.
lbl.Font = new Font(lbl.Font.FontFamily, best_size);
}
}
Интересная часть кода начинается, когда программа создает объект Graphics, связанный с Label. Затем программа перебирает размер шрифта от 1 до 100. Для каждого размера он создает шрифт такого размера с тем же семейством шрифтов, что и шрифт Label. В коде используется метод MeasureString объекта Graphics, чтобы увидеть, будет ли текст помещаться в Label. Если текст слишком велик, код выходит из цикла и использует следующий меньший размер шрифта.
