Groupbox根据文本长度调整宽度

时间:2014-08-26 13:56:20

标签: c# winforms groupbox

我有一个c#app(winform),它从xml文件生成Groupbox,并根据文件中的内容,用Radio Buttons或CheckBoxes填充它。这些组合框中的每一个都有一个名称,其中一些更长,并且在中途被切断。

enter image description here

这就是它们的生成方式。

int nc = groupNodes.Count;
for (int i = 0; i < nc; i++)
  {
       node = groupNodes[i];
       GroupBox box = new GroupBox();
       box.AutoSize = true;
       box.AutoSizeMode = AutoSizeMode.GrowAndShrink;
       box.Text = node.Attributes["name"].Value;
       //......
}

我尝试使用以下内容,

Size textSize = TextRenderer.MeasureText(box.Text,box.Font);
box.Width = (int)textSize.Width;

并尝试以下

box.width = (int)box.text.length;

但这些都没有任何区别。

我也遇到了This thread。但由于我不使用PaintEventArgs,我不确定这对我有何影响。

1 个答案:

答案 0 :(得分:1)

设置组框宽度只是您的一个问题。

可能应该这样做:

groupBox.AutoSize = true;
int oWidth = groupBox1.Width;
int tWidth = (int)groupBox.CreateGraphics().
                            MeasureString(groupBox.Text, groupBox.Font).Width;

if (tWidth > oWidth)
{
    groupBox.AutoSize = false;
    groupBox.Width = tWidth;
}

注意:

  • 此代码使用AutoSize属性。这将使GB足够宽,以保持其内容即。 RadioButtons&amp; CheckBoxes及其文本。因此,应在设置之前设置
  • 某些GB的结果为AutoSize,其他GB为false。
  • 更改GB的宽度后,需要重新定位,除非它们位于FlowLayoutPanel
  • 他们的内容(RadioButtons等应该在你放置它们之前仍然正确)。你对GB进行了Add对吧?如果有些人没有显示,请发布你用它们创建的代码!

顺序是这样的:

  1. 使用文字
  2. 创建GB
  3. 使用文本添加内容
  4. 调整GB的大小
  5. 重新定位GB(FLP不需要)