簡體   English   中英

GroupBox自動調整大小

[英]GroupBox autosize

拿一個GroupBox ,把let say Label放在里面,然后設置AutoSizeMode = GrowAndShrinkAutoSize = true

會出現兩個問題:

  • LabelGroupBox底部之間存在巨大差距(幾乎足以適應另一個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;

您可能還想嘗試將GroupBoxPadding設置為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM