把pannel里面的多個按鈕的那個anchor屬性全部去掉,如下圖:
再用VS2010自帶的工具調一下即可:
小注:
有的時候我們卻想子控件在父控件里的相對位置不要隨着父控件的變大縮小而變化,或者控件邊緣距離父控件邊緣的相對距離不要發生變化,但又不是停靠在父控件的邊緣,這就是Anchor該出場的時候了。Anchor的中文意思:錨。當給控件設置Anchor的時候,就相當於用一個鐵釘將控件的邊緣給釘住。
出處:https://blog.csdn.net/jiankunking/article/details/21643541
=======================================================
C#之winform設置控件居中
在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的尺寸一般總是剛剛包圍住所有文字,而且又是透明的,所以,正常情況下該屬性沒什么效果,只有當控件的區域比文字區域大了很多時,文字才明顯不對頭了。這時,就需要設置對齊方式。類似於對齊子控件,內容。
重寫以設置居中的代碼:
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);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
當然也可以在代碼設計器方法中用代碼進行計算,但意義不大,結果是導致預覽界面引發異常或錯誤,但程序運行則能夠正常顯示。
用代碼重寫OnResize方法,控制控件居中示意圖:
並且放大依然保持居中:
出處:https://blog.csdn.net/mingyueyixi/article/details/55035935/