如果不对组件进行任何设置,同时也不禁用C#窗体的最大化按钮,设置Form1不可调整,在Form1最大化之后,默认是如下图的效果:
这显然不符合大多数的审美,其实只要全选所有组件,不包含窗体,设置其所有组件的Anchor属性就好。
将Top,Left改成Top,Left,Right就好,
就是点一点下图的右端的长方形就好。
这样设置的话得到的效果如下图:
其实这已经足够了,如果还要进一步设置,则对Form1添加Resize事件,在于里面再对组件的位置进行调整。
我找了很久,都还有统一遍历并调整所有组件位置、大小的方法,比如Button支持Height属性调整大小,combobox与TextBox却要利用Button1不支持的调整Font的大小,来调整其中的大小。
同时,在Form1的Resize事件用foreach (Control ctl in this.Controls)遍历组件的时候,得到的控件顺序是逆转的,而且得到的只是一个Form1子控件的数组,比如如果form1下有groupbox下如果还有button1,其不在Form1.Controls这个控件数组中,因此只用Anchor既快捷又迅速,又明了。
Anchor是如下图的一个属性,不同的窗口大小又不同的对齐。
有的人可能疑惑,上述的例子为何不对所有组件的Anchor设置为top,left.right.bottom四个方位呢?那是因为四个方式都有Anchor的话,C#窗体会对所有组件的大小进行拉伸,但是textbox,combobox这些组件,并不支持高度拉伸。
窗体的缩放,我个人觉得与网页组件的布置一样,如果你难以在所有不同尺寸浏览器用百分比大小进行布局,那就让它居中吧。