GroupBox自动调整大小

时间:2013-08-19 07:54:47

标签: c# winforms autosize groupbox

选择GroupBox,然后在里面说Label,然后设置AutoSizeMode = GrowAndShrinkAutoSize = true

将出现两个问题:

  • LabelGroupBox的底部之间存在巨大差距(几乎足以适应另一个Label大声笑);
  • AutoSize不尊重GroupBox.Text财产。

问题如何让GroupBox.AutoSize正常工作?正确的意思是:最小宽度应足以适合GroupBox.Text,由于未知原因,下面应该没有间隙(它不是Margin,也不是Padding,它看起来很丑陋。


我尝试在OnPaint中测量字符串长度并在那里设置MinimumSize。它有效,但我对此表示怀疑,好像我想稍后设置MinimumSize - 它会在重新绘制后丢失。


更新,这是截图:

enter image description here

3 个答案:

答案 0 :(得分:2)

您可以通过从GroupBox派生一个新类来调整底部边缘,从而消除底部不需要的黄色空间。在VB中就像......

Public Class BetterGroupBox
    Inherits GroupBox

    Public Overrides Function GetPreferredSize(ByVal proposedSize As Size) As Size
        Dim ns = MyBase.GetPreferredSize(proposedSize)
        Return New Size(ns.Width, ns.Height - 15)
    End Function

End Class

答案 1 :(得分:1)

Label的位置固定在(0,0)以外的其他位置很简单,请尝试以下操作:

label1.Location = Point.Empty;

您可能还想尝试将Padding的{​​{1}}设置为GroupBox(默认为3):

0

答案 2 :(得分:0)

如果GroupBox增长控件,似乎AutoSize = true控件具有预定义的填充填充。也就是说,一旦控件(GroupBox内部)位于GroupBox底部的20个像素左右,GroupBox就会开始增长。这会导致从最底部控件的底部到GroupBox底部的20像素左右的填充(由@ Sinatr的附加图像以黄色突出显示)。

根据我的观察,在增加GroupBox的Width时,填充似乎更少。

无论如何,您可以执行以下“解决”问题:

    public void MyFunction()
    {
        groupBox1.AutoSize = true;

        // Do stuff (e.g., add controls to GroupBox)...

        // Once all controls have been added to the GroupBox...
        groupBox1.AutoSize = false;

        // Add optional padding here if desired.
        groupBox1.Height = myBottomMostControl.Bottom;
    }