Я хочу добавить кнопки в FlowLayoutPanel. Кнопки могут содержать более длинные тексты с пробелами между словами. Кнопки: Autosize = true и AutoSizeMode = AutoSizeMode.GrowAndShrink. Кроме того, я устанавливаю свойство MaximumSize равным (maxwidth, 0). maxwidth - это ширина панели. Таким образом, кнопка не становится слишком широкой.Кнопка WinForms: Autosize Maximumsize
Что я вижу, так это то, что ширина кнопки ограничена свойством MaximumSize, но когда происходит перенос текста, высота кнопки не авторазделяется до высоты обернутого текста. Есть ли решение этой проблемы?
Я также попытался вручную проклейки кнопки так:
using (Graphics cg = this.CreateGraphics()) {
SizeF size = cg.MeasureString(button.Text, button.Font, 200);
button.Width = (int)size.Width+20;
button.Height = (int)size.Height+20;
button.Text = someLongTextWithSpaces;
}
Но обратите внимание, что я добавил 20 к расчетному размеру. Он работает, но есть ли способ определить этот дополнительный размер? Может быть, 2x Padding + ?????
Через несколько часов ...
Я пришел к этой версии, которая, кажется, работает довольно хорошо.
using (Graphics cg = this.CreateGraphics()) {
var fmt = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak;
var prop = new Size(tableLayoutPanel1.Width - 20, 0);
var size = TextRenderer.MeasureText(button.Text, button.Font, prop, fmt);
int border = button.Height - button.Font.Height;
button.Width = (int)size.Width + border;
button.Height = (int)size.Height + border;
button.Text = someLongTextWithSpaces;
}
Похоже, что начальная высота кнопки - это границы + высота шрифта. Таким образом, я вычислил кнопку вычитания границы. Hightight button.font.Height.
Согласно Хансу, теперь я использую TextRenderer.MeasureText. Я тестировал его без включения VisualStyles, и он работал нормально. Любые комментарии по этому поводу?
вместо 'maxwidth' (если вы вручную добавили этот номер) попробуйте этот' FlowLayoutPanel1.ClientRectangle.Width' (или, тем не менее, вы вызвали эту панель). .... например, в 'Form_Resize' поставить код:' Button1.MaximumSize = Новый размер (FlowLayoutPanel1.ClientRectangle.Width, 0) '(это код vb, пожалуйста, конвертируйте его в C#) .... Я думаю, это C# code: 'Button1.MaximumSize == new Size (FlowLayoutPanel1.ClientRectangle.Width, 0);' – nelek
Я также устанавливаю MaximumSize вручную на фиксированное значение. Значение в порядке, только изменение размера по высоте не работает. Вы можете проверить это и в FormDesigner. Добавьте авторизованную кнопку с расширением/shring и более длинный текст с пробелами. Установите максимальную ширину, меньшую, чем текст. Ширина кнопки ограничена, но она не растет в высоту. – bebo
Почему вы добавили +20? –