Размер шрифта для соответствия метке в 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. Если текст слишком велик, код выходит из цикла и использует следующий меньший размер шрифта.