6

取 a GroupBox,把 let sayLabel放在里面,然后设置AutoSizeMode = GrowAndShrinkand AutoSize = true

会出现两个问题:

  • Label和底部之间有一个巨大的差距GroupBox(几乎足以容纳另一个Labellol);
  • AutoSize不尊重GroupBox.Text财产。

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


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


更新,截图如下:

在此处输入图像描述

4

3 回答 3

5

您可以通过从 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
于 2016-02-19T15:51:07.330 回答
1

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

label1.Location = Point.Empty;

您可能还想尝试将Padding您的GroupBox设置0为所有(默认为 3):

groupBox1.Padding = new Padding(0);
于 2013-08-19T07:59:44.350 回答
1

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

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

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

    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;
    }
于 2017-11-09T20:39:24.020 回答