如何使复选框的文本随着表单宽度的变化而自动换行

本文关键字:变化 表单 自动换行 何使 复选框 文本 | 更新日期: 2023-09-27 18:27:54

在windows窗体中,我有一个包含长文本的复选框列表,该窗体可重新调整大小。。

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

如何使复选框的文本随着表单宽度的变化而自动换行

您可以使用:

  1. 将"autosize"设置为"false"

  2. 将"MaximumSize"的宽度更改为所需的标签宽度,例如"70"

  3. 将"MinimumSize"的高度更改为所需的标签高度,例如"30"

要使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)来测量所需的大小!

我尝试了很多方法,但经过大量研究,终于成功了:-

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

第一个事件是LayoutEventHandler检测分辨率变化的第二个事件

在这些事件中:-

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);
            }
       }
  }