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

Источник: http://csharphelper.com/blog/2015/04/size-a-font-to-fit-a-label-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector