C# Winform 怎麼讓按鈕在Panel里居中顯示

把pannel裏面的多個按鈕的那個anchor屬性所有去掉,以下圖:html

再用VS2010自帶的工具調一下便可:java

小注:android

        有的時候咱們卻想子控件在父控件裏的相對位置不要隨着父控件的變大縮小而變化,或者控件邊緣距離父控件邊緣的相對距離不要發生變化,但又不是停靠在父控件的邊緣,這就是Anchor該出場的時候了。Anchor的中文意思:錨。當給控件設置Anchor的時候,就至關於用一個鐵釘將控件的邊緣給釘住。編程

 

 

 

出處:https://blog.csdn.net/jiankunking/article/details/21643541markdown

=======================================================ide

C#之winform設置控件居中

在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);

        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

固然也能夠在代碼設計器方法中用代碼進行計算,但意義不大,結果是致使預覽界面引起異常或錯誤,但程序運行則可以正常顯示。

用代碼重寫OnResize方法,控制控件居中示意圖:

這裏寫圖片描述

而且放大依然保持居中:
這裏寫圖片描述

 

 

出處:https://blog.csdn.net/mingyueyixi/article/details/55035935/

相關文章
相關標籤/搜索