把pannel里面的多个按钮的那个anchor属性所有去掉,以下图:html
再用VS2010自带的工具调一下便可:java
小注:android
有的时候咱们却想子控件在父控件里的相对位置不要随着父控件的变大缩小而变化,或者控件边缘距离父控件边缘的相对距离不要发生变化,但又不是停靠在父控件的边缘,这就是Anchor该出场的时候了。Anchor的中文意思:锚。当给控件设置Anchor的时候,就至关于用一个铁钉将控件的边缘给钉住。编程
出处:https://blog.csdn.net/jiankunking/article/details/21643541markdown
=======================================================ide
在C#的窗体编程,winfrom里面,原生控件卧槽般的坑爹,没有居中这种属性,这是很恶心的一件事情。工具
对比java的窗体,有很多布局是支持设置居中的,android更不用说。而winfrom这家伙没有。虽然java的窗体很丑很丑很丑,可C#在这方面实在是吐血到人了,一方面是很是优秀的图形化设计,一拖一拉,就设计好了,一边是坑爹般的居中属性没看到。布局
更坑爹的是,百度出来的答案净说废话,无图无真相。资料不多。this
最终还得亲自出马,上穷碧落下黄泉,解决了这个问题:spa
一、通用型:重写OnResize(EventArgs e)方法,经过计算,从新定位控件的位置。(优势:准确,通用,即便窗体改变也能使用;缺点:麻烦,不爽,而且只有在运行的时候才能看到效果)
二、万能型:直接在属性界面计算出居中坐标,设置为控件的Location属性值。并设置锚点Anchor为Top,钉住控件顶部位置。(优势:准确,通用,可以实时预览;缺点:尼玛,一个控件算一次,算完还得写上去,不吐血?好,万一窗体大小改变了,万一有不少个控件呢?算不死你,小样的)
以上两种方法都是经过计算肯定位置,一个是代码去肯定的,一个是人工计算并填写,因此不止能设置居中,什么居左,居右,居上,居下,都是能够的。前提是,很烦。
三、Label控件:将label的AutoSize属性设置为false,把label控件拉满或设置Dock属性为fill,填满父容器,再设置TextAlgin为MiddleCenter(居中)便可。(优势:动动鼠标就ok,实时预览;缺点:只适用于不设置背景的label控件,label设置背景就和按钮同样了,并且控件多了尼玛互相覆盖,洒获得处都是)
属性说明:
AutoSize(false):取消自动调整大小,这样控件就不会随窗体的改变而改变大小,位置等,并可以自定义控件的区域,位置等。
TextAlgin(MiddleCenter):文本对齐方式为居中。label的尺寸通常老是刚刚包围住全部文字,并且又是透明的,因此,正常状况下该属性没什么效果,只有当控件的区域比文字区域大了不少时,文字才明显不对头了。这时,就须要设置对齐方式。相似于对齐子控件,内容。
重写以设置居中的代码:
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
int x = (int)(0.5 * (this.Width - label1.Width));
int y = label1.Location.Y;
label1.Location = new System.Drawing.Point(x,y);
}
固然也能够在代码设计器方法中用代码进行计算,但意义不大,结果是致使预览界面引起异常或错误,但程序运行则可以正常显示。
用代码重写OnResize方法,控制控件居中示意图:
而且放大依然保持居中:
出处:https://blog.csdn.net/mingyueyixi/article/details/55035935/