C#Winform中控件的佈局思想

windows窗體應用程序的控件都派生自Control類,並繼承了許多通用成員,下面介紹Control類的一些基本特徵,瞭解這些能夠大致知道控件是如何實現在窗體中佈局的。

Achor 指示在控件的容器被調整時,控件緊貼着哪個方向的邊沿,例如在一個窗口中放置一個按鈕,並將按鈕的Anchor屬性設置爲Right+Bottom,當用戶調整窗口的大小時,按鈕將保持與窗口的底部和右邊沿的距離不變
ForeColor、BackColor ForeColor屬性表示前景色,即控件上呈現的文本的顏色;BackColor屬性表示控件的背景色
Dock 指示控件如何填充容器中的可用空間,如果設置爲FILL則表示控件將佔滿所有的可用空間;如果設置爲TOP,則表示控件將佔用容器上方的所有空間
Location與Left、Top 表示控件在容器中的位置、如果控件是窗口,那麼它的位置就相當於桌面座標(屏幕座標)。由於Location屬性是Point結構,是值類型,因此不應該直接修改其X和Y的值,而是向Location屬性賦予一個新的Point實例;葉可以直接設置Left(x座標)屬性和Top(y座標)屬性的值來調整控件的位置,例:Point p2 = new Point(20, 30); pictureBox1.Location = p2
Size和Width、Height 表示控件的大小,由高度和寬度兩個值決定。Size類型是Size結構,是值類型,不能直接修改,必須將一個新的Size實例賦值給Size屬性,或者直接修改控件的Width和Height屬性,例如:控件名.Size=new Size(高度,寬度)

調整控件的Z順序
當窗口或容器控件中的控件在佈局過程中發生重疊的時候,會出現層次性。Z順序較大的控件會遮擋Z順序較小的控件,即放在頂層的控件會擋住放在底層的控件。
1.設計人員可以在設計階段通過窗體設計器來調整控件的Z順序,右擊—【置於頂層】/【置於底層】。
2.可以在運行階段動態改變控件的Z順序。操作方式是左擊時增加控件的Z順序,右擊時減少控件的Z順序。同時,爲了讓讀者可以清晰的觀察到控件的佈局變化,可以分別處理他們的Point事件(Control.Point控件重繪)。
可以試試下面這段代碼,分別增加label1,label2,label3.體會它的變化



        public Form1()
        {
            InitializeComponent();
            label1.Paint += label1_Paint;
            label2.Paint += label2_Paint;
            label3.Paint += label3_Paint;
            label1.MouseClick += OnLabelMouseClick;
            label2.MouseClick += OnLabelMouseClick;
            label3.MouseClick += OnLabelMouseClick;
        }
        private void OnLabelMouseClick(object sender, MouseEventArgs e)//此爲共享事件處理程序
        {
            Control c = sender as Control;
            if(e.Button==System.Windows.Forms.MouseButtons.Left)
            {
                c.BringToFront();//增加Z順序
            }
            if (e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                c.SendToBack();//減少Z順序
            }
        }

        private void label3_Paint(object sender, PaintEventArgs e)
        {
            Label lb = sender as Label;//是事件源,表示觸發事件的那個組件
            Pen pen = new Pen(Color.Blue, 15f);//用於繪製邊框的筆
            e.Graphics.DrawRectangle(pen, new Rectangle(0, 0, lb.Width, lb.Height));
            pen.Dispose();//釋放Pen對象
        }

        private void label2_Paint(object sender, PaintEventArgs e)
        {
            Label lb = sender as Label;//是事件源,表示觸發事件的那個組件
            Pen pen = new Pen(Color.Red, 15f);//用於繪製邊框的筆
            e.Graphics.DrawRectangle(pen, new Rectangle(0, 0, lb.Width, lb.Height));
            pen.Dispose();//釋放Pen對象
        }

        private void label1_Paint(object sender, PaintEventArgs e)
        {
            Label lb = sender as Label;//是事件源,表示觸發事件的那個組件
            Pen pen = new Pen(Color.Yellow, 15f);//用於繪製邊框的筆
            e.Graphics.DrawRectangle(pen, new Rectangle(0, 0, lb.Width, lb.Height));
            pen.Dispose();//釋放Pen對象
        }

在這裏插入圖片描述

控件的Anchor屬性、Dock屬性--影響佈局

在設計窗體時,這兩個屬性特別有用,如果用戶認爲改變窗口的大小並不容易,應確保窗口看起來顯示的不是那麼亂,並編寫很多代碼來實現這個效果,許多程序解決這個問題都是禁止給窗口重新設置大小
這顯然是解決問題的最簡單的方法,但不是最好的方法,因此引入了Anchor和Dock屬性。

1、Anchor屬性用於指定在用戶重新設置窗口的大小時控件應該如何響應,可以指定如果控件重新設置了大小,就根據控件的邊界去鎖定它,或者其大小不變,但根據窗口的邊界來錨定它的位置

 

        正如名稱暗示的那樣,這個屬性迫使控件將其自身定位在父窗體或父控件中某個相對或絕對位置,這個屬性有四個可以開啓或關閉的值
            * Top--表示控件中與父窗體(父控件)相關的頂部應該保持固定
            * Bottom--表示控件中與父窗體(父控件)相關的底部應該保持固定
            * Left--表示控件中與父窗體(父控件)相關的左邊緣應該保持固定
            * Right--表示控件中與父窗體(父控件)相關的右邊緣應該保持固定
        正如演示的那樣,每個控件在父窗體上都自動的保持它的位置,需要注意的是:
            ①如果沒有指定一個控件有左右錨定,它將在父窗體中保留一個相對左右的位置,其它也是一樣
            ②如果選擇了所有Anchor值的控件,控件只是在調整父窗體大小時,隨着增大和縮小--與窗體的邊緣比較起來它的所有邊緣保持靜止不變。
        







2、Dock屬性用於指定控件應該停放在窗口的邊框上,用戶重新設置了窗口的大小,這個控件將繼續停放在窗口的邊框上,例如,如果指定控件停留在窗口的底部邊界上,則無論窗口的大小怎麼改變,這個控件都將改變大小,或移動其位置,確保總是位於屏幕的底部。

 

        Dock屬性迫使控件緊貼父窗體的某個邊緣。雖然Anchor屬性也可以實現這一點,但是Dock屬性使得能夠在父窗體中讓子窗體可以再上方(或旁邊)互相堆疊,如果某個子窗體改變了大小,其它停駐在它旁邊的子窗體也會隨之改變。和Anchor屬性不同的是,可以將Dock屬性設置爲一個單值:
            *Top--迫使控件位於父窗體(或控件)的頂部,如果有同一個父窗體的其它子控件也被設置爲停駐在頂部的話,那麼控件將在彼此上方互相堆疊
            * Bottom--迫使控件位於父窗體(或控件)的底部,如果有同一個父窗體的其它子控件也被設置爲停駐在底部的話,那麼控件將在彼此上方互相堆疊
            * Left--迫使控件位於父窗體(或控件)的左邊,如果有同一個父窗體的其它子控件也被設置爲停駐在左邊的話,那麼控件將在彼此旁邊互相堆疊
            * Right--迫使控件位於父窗體(或控件)的右邊,如果有同一個父窗體的其它子控件也被設置爲停駐在右邊的話,那麼控件將在彼此旁邊互相堆疊
            * Fill--迫使控件位於父窗體(或控件)的上方,如果有同一個父窗體的其它子控件也被設置爲停駐在上方的話,那麼控件將在彼此上方互相堆疊
            * None--表示控件將會正常運轉
        需要注意的是:對於Dock屬性,添加控件的順序會影響它們停駐的方式。






窗體控件 佈局 屬性

 

佈局

AutoScaleMode:當屏幕分辨率或字體發生改變時,窗體和控件是如何發生變化的。
- None : 禁用自動縮放。(默認時)
- Font :根據類使用的字體(通常爲系統字體)的維度控制縮放。如果希望控件或窗體根據操作系統中字體的大小進行拉伸或縮小,則按 Font 縮放十分有用,如果控件或窗體的絕對大小無關緊要,則應使用這種方式進行縮放。比如:一個按鈕的文字,改變了系統的字體大小,按鈕也隨着變大到能完整顯示文字。例子:新建一個winform,字體爲 ‘宋體 9pt’,上面還有一個button,用來參考,然後,先改變winform的字體大小,就改爲‘宋體 16pt’吧。這時候,連按鈕都變大了。
- Dpi : 根據顯示分辨率控制縮放。常用分辨率爲 96 和 120 DPI。如果要相對於屏幕確定控件或窗體的大小,則按 Dpi 縮放十分有用。例如,對於顯示圖表或其他圖形的控件,可能希望使用每英寸點數 (DPI) 縮放,以便該控件始終佔據一定百分比的屏幕
- Inherit : 根據類的父類的縮放模式控制縮放。如果不存在父類,則禁用自動縮放。
AutoScroll:只是當控件內容大於它的可見區域時是否自動顯示滾動條。
- TRUE—是
- FALSE—否
AutoSize:指定控件是否自動調整自身的大小以適應其內容的大小。
- TRUE—是
- FALSE—否
AutoSizeMode:指定用戶界面元素自動調整自身大小的模式。
- GrowOnly—生成的窗體可以用鼠標調節大小
- GrowAndShrik—生成的窗體不可以用鼠標調節大小
Anchor:定義某個控件綁定到的容器的邊緣,當控件錨定到某個邊緣時,與指定邊緣最接近的控件邊緣與指定邊緣之間的距離將保持不變。
-Top——表示控件中與父窗體(或父控件)相關的頂部應該保持固定(Anchor相當於是將控件釘在了父控件上,不管父控件怎麼放大縮小,它與父控件邊緣距離都將保持絕度距離不變)
- Bottom——表示控件中與父窗體(或父控件)相關的底邊應該保持固定
- Left——表示控件中與父窗體(或父控件)相關的左邊緣應該保持固定
- Right——表示控件中與父窗體(或父控件)相關的右邊緣應該保持固定
- None——漂浮
Dock:用於指定控件應停放在窗口的邊框上,用戶重新設置了窗口的大小,這個控件將繼續停放在窗口的邊框上,例如,如果指定控件停放在窗口的底部邊界上,則無論窗口的大小改變,這個控件都將改變大小,或移動其位置,確保總是位於屏幕的底部。雖然Anchor屬性也可以實現這一點,但是dock屬性使得你能夠在父窗體中讓子窗體可以在上方(或旁邊)互相“堆疊”。
- Top——迫使控件位於父窗體(或控件)的頂部。如果有同一個父窗體的其它子控件也被設置爲停駐在頂部的話,那麼控件將在彼此上方相互堆疊。
- Bottom——迫使控件位於父窗體(或控件)的底部。如果有同一個父窗體的其它子控件也被設置爲停駐在底部的話,那麼控件將在彼此上方相互堆疊。
- Left——迫使控件位於父窗體(或控件)的左邊。如果有同一個父窗體的其它子控件也被設置爲停駐在左邊的話,那麼控件將在彼此旁邊相互堆疊。
- Right——迫使控件位於父窗體(或控件)的右邊。如果有同一個父窗體的其它子控件也被設置爲停駐在右邊的話,那麼控件將在彼此旁邊相互堆疊。
- Fill——迫使控件位於父窗體(或控件)的上方。如果有同一個父窗體的其它子控件也被設置爲停駐在上方的話,那麼控件將在彼此上方相互堆疊。
- None——表示控件將會正常運轉。

























窗口樣式

MaximizeBox:確定窗體標題欄的右上角是否有最大化框。
- TRUE—是
- FALSE—否

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章