选择GroupBox
,然后在里面说Label
,然后设置AutoSizeMode = GrowAndShrink
和AutoSize = true
。
将出现两个问题:
Label
与GroupBox
的底部之间存在巨大差距(几乎足以适应另一个Label
大声笑); AutoSize
不尊重GroupBox.Text
财产。问题如何让GroupBox.AutoSize
正常工作?正确的意思是:最小宽度应足以适合GroupBox.Text
,由于未知原因,下面应该没有间隙(它不是Margin
,也不是Padding
,它看起来很丑陋。
我尝试在OnPaint
中测量字符串长度并在那里设置MinimumSize
。它有效,但我对此表示怀疑,好像我想稍后设置MinimumSize
- 它会在重新绘制后丢失。
更新,这是截图:
答案 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;
}