控件的基類–Control
- 用于 Windows 窗體應用程序的控件都派生自 Control類并繼承了許多通用成員,這些成員都是平時使用控件的過程最常用到的。
- 無論要學習哪個控件的使用,都離不開這些基本成員,尤其是一些公共屬性。由于 Conlrol 類規范了控件的基本特征,因此在學習如何使用各種控件之前,先介紹 Control類。
- 可以簡單理解為 WinForm程序 == 一些控件組合 + 事件 + 業務邏輯 組成。控件是非常重要的。
本節主要介紹 Control類的一些基本屬性,剩下一些內容會留到后面在介紹如何自己開發控件時再討論。
一、Control類的一些常用屬性
1、“Name”屬性
控件實例的名稱,通常通過“屬性”窗口設置,控件實例名稱與控件變量名稱相同,以便在代碼中能夠引用。
指示在控件的容器被調整時,控件緊貼著哪個方向的邊沿。比如,一個窗口中放置了一個按鈕,并將按鈕的Anchor屬性設置為Right+Boltom,當用戶調整窗口的大小時,按鈕將保持與窗口的底部和右邊沿的距離不變。下圖為窗口被調整大小之前按鈕的位置,下圖為窗口被調整大小后按鈕的位置,可以看到,按鈕始終緊貼著窗口的右下角不變。
調整前如下:
調整后如下:
3、“Margin和Padding”屬性
Margin屬性與Padding屬性都表示邊距。如圖所示,A、B、C三個控件形成嵌關系假設控件B為當前控件,即以B控件作為參考。Margin指的是B控件與它的父容器A邊沿之間的距離;Padding指的是控件B與它的子級控件C之間的邊距。所以,Margin與Padding是相對值。
4、“Visible”屬性
指示控件是否可見,如果為true,則用戶可以看到該控件,否則用戶將看不到該控件
5、“Enabled”屬性
指示控件是否可用。如果為true,說明控件處于可用狀態;如果為false,表示控件不可用、控件將不與用戶進行任何交互
6、“Font”屬性
表示控件中所呈現文本的字體。包括字體、字體大小、是否加粗等
7、“ForeColor、BackColor和Backgroundlmage”屬性
ForeColor屬性表示前景色,即控件上星現的文本的顏色;BackColor展性表示控件的背景色;BackgroundImage屬性可以提供一個像實例來繪制控件的背景。
8、“Dock”屬性
指示控件如何填充容器中的可用空間。如果設置為Fill 則表示控件將占滿所有可用空間;如果設置為Top,則表示控件將占用容器上方的所有空間;如果設置為Left,則表示控件將占用容器的左側所有空間;如果設置為Right,則表示控件將占用容器的右側所有空間;如果設置為Bottom,則表示控件將占用容器的下方所有空間;
9、“Location與Lef、Top”屬性
表示控件在容器中的位置,如果控件是窗口,那么它的位置就相對于桌面坐標(屏落坐標)而定。由于Location屬性的類型是Poini結構,是值類型,因此不能直接修改其X和Y的值,而是向Locaton屬性賦一個新的Point實例;也可以直接設置Lef屬性(X坐標)和Top屬性(坐標)的值來調整控件的位置
10、“Size與Width、Height”屬性
表示控件的大小,由寬度和高度兩個值決定。與Locaton屬性一樣,Size屬性的類型是Size結構,是值類型,不能直接修改,必須將一個新的Size實例賦給Size屬性;或者直接修改控件的Width和Height屬性
11、“Cursort”屬性
獲取或設置當鼠標指針位于控件上時顯示的光標。
二、Control類的一些常用事件
1、Click:當控件被單擊時發生。
2、DoubleClick:當控件被雙擊時發生。
3、GotFocus 和 LostFocus:分別當控件獲得或失去焦點時發生。
4、KeyDown、KeyPress 和 KeyUp:分別當控件有焦點時,按下、按下并釋放、釋放一個鍵時發生。
5、MouseDown、MouseEnter、MouseMove、MouseHover、MouseLeave 和 MouseUp:分別當鼠標在控件上按下、移入、移動、懸停、移出和釋放時發生。
6、Paint:當控件需要重繪時發生。
7、Resize:當控件的大小發生變化時發生。
8、DragDrop、DragEnter、DragLeave 和 DragOver:與拖拽操作相關的事件。
三、控件布局時注意點:控件的Z順序
什么是控件的Z順序?當窗體或容器控件中的控件在布局過程中發生重疊時,會出現層次性,Z順序較大的控件會遮擋Z順序較小的控件,即放在頂層的控件會擋住放在底層的控件。Z順序大致結構如圖所示:
Winform Z順序核心解析
1、Z順序基礎概念
- Z順序(Z-Order)是Winform中決定控件堆疊層級的屬性,沿窗體的Z軸(深度方向)排列。Z序值較高的控件會覆蓋較低值的控件,離窗體越近的控件優先級越高?。
2、設計時調整Z順序
- 圖形化操作?:
右鍵目標控件 → 選擇【置于頂層】(Bring to Front)或【置于底層】(Send to Back),直接調整其顯示層級?。
點擊“置于頂層”后,A控件會跑到B控件上方,如下圖:
?布局影響?:
控件停靠(Dock屬性)時,Z順序會影響停靠優先級。較近的控件優先占據停靠區域,較遠控件則在剩余空間中調整?。
3、編程方式動態調整
?常用方法?:
- BringToFront():將控件提升至最頂層。
- SendToBack():將控件移至最底層?。
?精細控制?:
- 使用Controls.SetChildIndex()方法,通過指定索引值調整子控件的Z序。例如:
this.Controls.SetChildIndex(specificControl, 0); // 置頂
this.Controls.SetChildIndex(anotherControl, Controls.Count -1); // 置底
此方法適用于容器內的子控件層級調整?。
4、注意事項
-
性能優化?:
若父控件包含大量子控件,頻繁調用SetChildIndex可能影響性能。建議減少調用頻率或批量操作?。 -
跨線程操作?:
在非UI線程中調整Z順序時,需通過Invoke或BeginInvoke方法確保線程安全?。 -
視覺效果增強?:
可通過調整控件的Opacity、BackColor等屬性,輔助區分重疊控件的顯示層次?。
5、Z順序與布局優先級
- Z順序不僅影響顯示層級,還與控件的停靠(Dock)、錨定(Anchor)等布局屬性交互。例如:停靠控件按Z序從近到遠依次布局,后停靠的控件可能被覆蓋?。