【问题标题】:GroupBox autosizeGroupBox 自动调整大小
【发布时间】:2017-11-10 04:39:24
【问题描述】:

取一个GroupBox,在里面输入Label,然后设置AutoSizeMode = GrowAndShrinkAutoSize = true

会出现两个问题:

  • Label 和底部GroupBox 之间存在巨大差距(几乎可以容纳另一个Label 哈哈);
  • AutoSize 不尊重 GroupBox.Text 属性。

问题是如何使GroupBox.AutoSize 正常工作?正确的意思是:最小宽度应该足以容纳GroupBox.Text,下面不应该有不明原因的间隙(不是Margin,也不是Padding,它看起来很丑)。


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


更新,截图如下:

【问题讨论】:

  • 很明显label1的位置不是Point(0,0)?你甚至没有尝试我的解决方案。
  • 是的,我试过了,不,它不起作用。我在答案本身中告诉了这一点。想让我发布另一个屏幕截图,其中GroupBox 已折叠(因为没有任何东西可以阻止AutoSize 将父级的大小减小到零)。请告诉我,这个问题我现在该怎么办?我有一个明显的、未解决的问题,来自微软,但我的问题被搁置了,所以没有人会费心回答它。再发一遍?

标签: c# winforms autosize groupbox


【解决方案1】:

您可以通过从 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

【讨论】:

    【解决方案2】:

    很简单,您的Label 的位置固定在(0,0) 以外的某个位置,试试这个:

    label1.Location = Point.Empty;
    

    您可能还想尝试将您的GroupBoxPadding 设置为0(默认为3):

    groupBox1.Padding = new Padding(0);
    

    【讨论】:

    • 不起作用。设置这个然后GroupBox.AutoSize = true 将折叠组框以具有1像素宽度或其他东西。有趣的是,折叠组框的 高度 将比需要的更大(以在 label1 下再容纳一个 Label)。这个答案如何解决第二个问题(GroupBox.Text)?
    • @Sinatr 请张贴您的屏幕截图。我已经试过了,它 shrinks 几乎和内部 Label 一样大。
    • @Sinatr 大小根据GroupBox 的文字调整大小,不是更好吗?
    【解决方案3】:

    如果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;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-25
      • 2018-02-06
      • 2015-03-13
      • 2013-12-16
      • 2015-06-16
      • 2011-04-02
      • 2013-07-16
      • 1970-01-01
      相关资源
      最近更新 更多