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

时间:2014-12-15 13:44:29

标签: c# winforms visual-studio-2010 size

所以我创建了一个表单布局并尝试在其上设置MinimumSize只是为了找出WinForms合适!所以这就是我开始使用MinimumSize属性设置为宽度...

时的样子

enter image description here

正如你所看到它看起来很棒,没有额外的空格,表格是我想要的尺寸等等...... 然后,我尝试关闭表单并将其打开,我有一个小的奇怪(MinimumSize高度设置为0,现在WinForms已经使它成为38)但是无论它仍然按预期工作..

enter image description here

好吧那个奇怪的" 38"在MinimumSize-Height上很奇怪但是无论如何,让我尝试将我喜欢的MinimumSize-Height设置为420(与表单大小相同)。

enter image description here

保存,关闭表单设计器并重新打开... WTF?一切都出了差错!我底部的三个按钮都被向上推,所以我上面有文本框和树视图控件,左侧列表视图高度也已调整大小。事实上,看着它似乎控件的大小仍然是正确的。已更改的变量是表单大小。它已经以某种方式从420变为442 ???

enter image description here

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

谢谢!

1 个答案:

答案 0 :(得分:6)

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

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

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

    public Form1() {
        InitializeComponent();
        this.ControlBox = false;
    }