В формах Windows у меня есть список флажков, содержащий длинный текст, размер формы можно изменять.
Могу ли я сделать автоматический перенос текста во время выполнения в соответствии с шириной формы?
В формах Windows у меня есть список флажков, содержащий длинный текст, размер формы можно изменять.
Могу ли я сделать автоматический перенос текста во время выполнения в соответствии с шириной формы?
Вы можете использовать:
установите для autosize значение false
измените ширину "MaximumSize" на желаемую ширину этикетки, скажем, "70"
измените высоту MinimumSize на желаемую высоту ярлыка, скажем, 30
Чтобы обернуть Text
, вам нужно сделать свойство AutoSize
ложным и разрешить больший Height
:
checkBox1.AutoSize = false;
checkBox1.Height = checkBox1.Height * 3; // or however many lines you may need
// style the control as you want..
checkBox1.CheckAlign = ContentAlignment.TopLeft;
checkBox1.TextAlign = ContentAlignment.TopLeft;
checkBox1.Anchor = AnchorStyles.Right;
checkBox1.Text = "12321312231232 13189892321 312989893123 ";
Вам нужно будет подумать о вертикальной компоновке ..
Может быть, в этом поможет FlowLayoutPanel
, или, может быть, вы захотите измерить необходимый размер с помощью Graphics.MeasureString
или TextRenderer.MeasureText(String, Font, Size)
!
Я пробовал много подходов, но, наконец, этот сработал после множества исследований: -
просто я использовал два события, чтобы определить изменение размера панели, содержащей элементы управления, и соответствующим образом настроил элементы управления.
первое событие - это LayoutEventHandler strong >, второе событие для обнаружение изменения разрешения
в этих событиях: -
1- получить ширину панели с учетом разрешения (нижнее допустимое разрешение - 1024x768)
Rectangle resolution = Screen.PrimaryScreen.Bounds;
int panelWidth *= (int)Math.Floor((double)resolution.Width / 1024);
2- цикл на все элементы управления и отрегулируйте ширину элемента управления, чтобы она соответствовала ширине панели (я вычел 10 пикселей для ширины вертикальной прокрутки), затем я получил высоту элемента управления из функция MeasureString, которая берет на себя управление текста, шрифта и ширины элемента управления и вернуть размер элемента управления.
(т.е. я умножил высоту примерно на коэффициент 1,25, чтобы преодолеть высоту строки и отступы)
foreach (var control in controls)
{
if (control is RadioButton || control is CheckBox)
{
control.Width = panelWidth - 10;
Font fontUsed = control.Font;
using (Graphics g = control.CreateGraphics())
{
SizeF size = g.MeasureString(control.Text, fontUsed, control.Width);
control.Height = (int)Math.Ceiling(size.Height * 1.25);
}
}
}
DataGridView
сCheckBoxColumn
иTextBoxColumn
будет лучшим подходом.DataGridViewCellStyle
иметь собственностьWrapMode
- person Fabio   schedule 30.10.2014