由于MinimumSize重新打开Visual Studio窗体设计器更改布局

Arv*_*wen 5 c# size visual-studio-2010 winforms

所以我创建了一个表单布局并尝试在其上设置MinimumSize,但却发现WinForms非常合适!所以这就是我开始使用MinimumSize属性设置为宽度时的样子...

在此输入图像描述

你可以看到它看起来很棒,没有额外的空格,表单是我想要的大小等等......然后,我尝试关闭表单并将其打开,我有一点奇怪(MinimumSize高度设置为0现在WinForms已经成功了38)但不管它仍然按预期工作..

在此输入图像描述

确定好就的minimumSize,高度奇"38"是奇怪,但不管,让我尝试我者优先的minimumSize,高度设置为420(尺寸相同的形式).

在此输入图像描述

保存,关闭表单设计师并重新打开... WTF?一切都出了差错!我在底部的三个按钮都被拉高,因此具有文本框和TreeView控件我把它上面,以及左侧列表视图高度已经调整.事实上,看着它似乎控件的大小仍然是正确的.已更改的变量是表单大小.它有点从420到442 ???

在此输入图像描述

任何人都知道为什么会这样?我可以做些什么来修复它,或者我想解决它?请记住我有按钮,文本框固定在底部.树视图需要保持固定在顶部,并随着窗口的大小调整而增长.

谢谢!

Han*_*ant 6

这当然是设计师的错误.它是由Winforms中的一个功能引起的,它通常是设计者的麻烦制造者,它实际上从未存储过Size属性.您可以在表单的Designer.cs文件中的自动生成代码中看到的内容.相反,它存储ClientSize并基于该值计算大小.一个非常必要的功能,标题栏的高度是不可预测的,这取决于用户配置.

在您的情况下触发错误的是将ControlBox属性设置为False.这也禁用了Icon,并对外部尺寸进行了计算.我认为,与分配属性的顺序有关,Form类应该实现ISupportInitialize但不是.MinimumSize.Height的值38是副作用,即机器上标题栏的高度.你不能让窗口小于那个.在设计时也应用的约束,另一个怪癖.

解决方法很简单.将ControlBox属性设置回True,并在Form构造函数中设置其值:

    public Form1() {
        InitializeComponent();
        this.ControlBox = false;
    }
Run Code Online (Sandbox Code Playgroud)