如何通过更改表单宽度自动包装复选框文本?

时间:2014-10-27 13:20:46

标签: c# winforms checkbox textwrapping

在Windows窗体中,我有一个包含长文本的复选框列表,表单可以重新调整大小..

我可以根据表单宽度自动在运行时自动换行吗?

3 个答案:

答案 0 :(得分:4)

您可以使用:

  1. 将'autosize'设为'false'

  2. 将“MaximumSize”的宽度更改为您想要的标签宽度,例如“70”

  3. 将“MinimumSize”的高度更改为您想要的标签高度,例如“30”

答案 1 :(得分:2)

要进行Text换行,您需要将AutoSize属性设为false并允许更大的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.MeasureStringTextRenderer.MeasureText(String, Font, Size)来衡量所需的尺寸!

答案 2 :(得分:-1)

我尝试了很多方法,但最后这个方法在经过大量研究之后起作用了: -

我只是使用两个事件来检测包含控件的面板的大小变化,然后相应地调整了控件。

第一个事件是LayoutEventHandlerdetecting resolution change

的第二个事件

在这些事件中: -

1-考虑分辨率(较低的接受分辨率为1024x768)获得面板宽度

  Rectangle resolution = Screen.PrimaryScreen.Bounds;
  int panelWidth *= (int)Math.Floor((double)resolution.Width / 1024);
all controls上进行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);
            }
       }
  }