[英]GroupBox autosize
拿一個GroupBox
,把let say Label
放在里面,然后設置AutoSizeMode = GrowAndShrink
和AutoSize = true
。
會出現兩個問題:
Label
和GroupBox
底部之間存在巨大差距(幾乎足以適應另一個Label
lol); AutoSize
不尊重GroupBox.Text
屬性。 問題是如何使GroupBox.AutoSize
正常工作 ? 正確的意思是:最小寬度應該足以適合GroupBox.Text
,由於未知原因,下面應該沒有間隙(它不是Margin
,也不是Padding
,看起來很丑陋)。
我試圖在OnPaint
測量字符串長度並在那里設置MinimumSize
。 它有效,但我對此有疑問,好像我想稍后實際設置MinimumSize
- 它會在重繪后丟失。
更新,這里是截圖:
您可以通過從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
很簡單, Label
的位置固定在(0,0)
以外的某個點,試試這個:
label1.Location = Point.Empty;
您可能還想嘗試將GroupBox
的Padding
設置為0
(默認值為3):
groupBox1.Padding = new Padding(0);
如果AutoSize = true
則在生成AutoSize = true
時,似乎GroupBox
控件具有預定義的填充填充。 也就是說,一旦控件(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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.