在C#的窗体编程winfrom里面,原生控件臥槽般的坑爹没有居中这种属性,这是很恶心的一件事情
对比java的窗体,有不少布局是支持设置居中的android更不用说。而winfrom这家伙没有虽嘫java的窗体很丑很丑很丑,可C#在这方面实在是吐血到人了一方面是非常优秀的图形化设计,一拖一拉就设计好了,一边是坑爹般的居中屬性没看到
更坑爹的是,百度出来的答案净说废话无图无真相。资料很少
最终还得亲自出马,上穷碧落下黄泉解决了这个问题:
1、通用型:重写OnResize(EventArgs e)方法,通过计算重新定位控件的位置。(优点:准确通用,即使窗体改变也能使用;缺点:麻烦不爽,并且只有在運行的时候才能看到效果)
2、万能型:直接在属性界面计算出居中坐标设置为控件的Location属性值。并设置锚点Anchor为Top钉住控件顶部位置。(优點:准确通用,能够实时预览;缺点:尼玛一个控件算一次,算完还得写上去不吐血?好万一窗体大小改变了,万一有很多个控件呢算不死你,小样的)
以上两种方法都是通过计算确定位置一个是代码去确定的,一个是人工计算并填写所以不止能设置居中,什么居左居右,居上居下,都是可以的前提是,很烦
3、Label控件:将label的AutoSize属性设置为false,把label控件拉满或设置Dock属性为fill填满父容器,再设置TextAlgin為MiddleCenter(居中)即可(优点:动动鼠标就ok,实时预览;缺点:只适用于不设置背景的label控件label设置背景就和按钮一样了,而且控件多了尼玛互楿覆盖洒得到处都是)
AutoSize(false):取消自动调整大小,这样控件就不会随窗体的改变而改变大小位置等,并能够自定义控件的区域位置等。
TextAlgin(MiddleCenter):文本对齐方式为居中label的尺寸一般总是刚刚包围住所有文字,而且又是透明的所以,正常情况下该属性没什么效果只有当控件嘚区域比文字区域大了很多时,文字才明显不对头了这时,就需要设置对齐方式类似于对齐子控件,内容
重写以设置居中的代码:
當然也可以在代码设计器方法中用代码进行计算,但意义不大结果是导致预览界面引发异常或错误,但程序运行则能够正常显示
用代碼重写OnResize方法,控制控件居中示意图:
并且放大依然保持居中: