所以我创建了一个表单布局,并试图设置一个最小的大小,只有它才发现winforms有一个适合!下面是当我开始使用minimumSize属性时的样子,它只为宽度设置…
你可以看到它看起来很棒,没有额外的空白,表格是我想要的大小等…
然后,我尝试关闭窗体并将其打开,我有一个小的奇怪之处(minimumsize height设置为0,现在winforms已将其设置为38),但无论它仍然按预期工作。
好吧,最小尺寸高度上的奇怪的“38”是奇怪的,但是不管怎样,让我试着把我喜欢的最小尺寸高度设置为420(与表单大小相同)。
保存,关闭窗体设计器并重新打开…世界跆拳道联盟?一切都出了差错!底部的三个按钮都被向上推了,上面的文本框和treeview控件,以及左边的listview高度都被调整了。事实上,看着它,似乎所有的控件仍然是正确的大小。已更改的变量是窗体大小。它不知怎么地从420变成了442???
有人知道为什么会这样吗?我能做些什么来修复它,或者我想我能解决它吗?请记住我有按钮,文本框固定在底部。树状视图需要固定在顶部,并随着窗口大小的调整而增长。
谢谢!

最佳答案

这当然是一个设计师的缺陷。它是由winforms中的一个特性引起的,该特性通常是设计器的麻烦制造者,它从未实际存储size属性。在表单的designer.cs文件中自动生成的代码中可以看到一些内容。相反,它存储ClientSize并根据该值计算大小。一个非常必要的功能,标题栏的高度是不可预测的,这取决于用户配置。
在您的案例中触发错误的是将controlbox属性设置为false。这也会禁用图标,影响外部大小的计算。我认为,表单类应该实现isupportinitialize,但不应该实现isupportinitialize。minimumsize的值为38。height是一个副作用,它是计算机上标题栏的高度。你不能把窗户弄小。在设计时也应用的约束,另一个怪癖。
解决办法很简单。将controlbox属性设置回true,然后在窗体构造函数中设置其值:

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

07-24 14:57