Размер 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;
}
Отрабатывает идеально, тестировал на огромном объеме текста. Если кто-то этим решит воспользоваться - играйтесь с вычитаемыми параметрами.
