Размер CheckBox, зависящий от текста на нем

Хотел бы попросить помощи с размером чекбоксов. Есть генератор чекбоксов, который размещает их на flowLayoutPanel.

for (int i = 1; i <= buttons_count; i++)
{
    CheckBox button = new CheckBox();
    button.Name = "btn" + i;
    button.Text = Read.ReadLine();
    button.Click += ButtonOnClick;
    button.Parent = flowLayoutPanel1;
    setButSize(button);
}

Я хочу ограничить ширину чекбоксов шириной родителя, а высоту изменять в зависимости от текста. Пробовал Autosize - уходит за границы родителя.
Потом пришел к чему-то подобному:

void setButSize(Control c)
{
    Size canvas = new Size(c.Parent.Width, c.Parent.Height);
    Graphics g = Graphics.FromHwnd(c.Handle);
    SizeF size = g.MeasureString(c.Text, c.Font, canvas, null);
    c.Width = (int)size.Width;
    c.Height = (int)size.Height;
    Console.WriteLine(c.Text);
    Console.WriteLine(canvas);
}

Но почему-то получаю вот это: скрин Консолью проверил c.Text, c.Font, canvas возвращают верные данные. Помогите пожалуйста!


Ответы (1 шт):

Автор решения: anato_no_kao

В общем, для себя определил вот такое решение проблемы

        void setButSize(Control c)
    {
        Size canvas = new Size(c.Parent.Width - 30, c.Parent.Height - 10);
        Graphics g = Graphics.FromHwnd(c.Handle);
        SizeF size = g.MeasureString(c.Text, c.Font, canvas);
        c.Width = (int)size.Width + 25;
        c.Height = (int)size.Height + 30;
    }

Отрабатывает идеально, тестировал на огромном объеме текста. Если кто-то этим решит воспользоваться - играйтесь с вычитаемыми параметрами. Скрин1 Скрин2 Фулл скрин

→ Ссылка