Winform Anchor和Dock屬性
在設計窗體時,這兩個屬性特別有用,如果使用者認為改變視窗的大小並不容易,應確保視窗看起來不顯得很亂,並編寫許多程式碼行來達到這個目的,許多程式解決這個問題是地,都是禁止給視窗重新設定大小,這顯然是解決問題最簡單的方法,但不是最好的方法..NET引入了Anchor和Dock屬性,就是為了在不編寫任何程式碼的情況下解決這個問題.
Anchor屬性用於指定在使用者重新設定視窗的大小時控制元件應該如何響應,可以指定如果控制元件重新設定了大小,就根據控制元件的邊界鎖定它,或者其大小不變,但根據視窗的邊界來錨定它的位置.
Dock屬性用於指定控制元件應停放在視窗的邊框上,使用者重新設定了視窗的大小,這個控制元件將繼續停放在視窗的邊框上,例如,如果指定控制元件停放在視窗的底部邊界上,則無論視窗的大小改變,這個控制元件都將改變大小,或移動其位置,確保總是位於螢幕的底部.
有一點讓許多剛接觸WinForms程式設計的開發者感到很棘手,就是在使用者調整各種控制元件的大小時,怎樣使它們的窗體保持同步,並與父窗體相稱。這可以成為一種讓人非常沮喪的情況,尤其是對於有著Web程式設計背景,轉為WinForms的開發者來說。為了緩解這個問題,.NET框架允許你對子控制元件設定屬性,命令在調整父窗體大小時,它們應該如何運作。用來命令控制元件在調整大小時動作的兩個屬性就是“Dock”和“Anchor”。Dock和Anchor通過將控制元件連線到它們父窗體的某個位置,而免除了使應用程式具有不可預知介面的麻煩。最好的一點就是設立這些屬性不需要任何手寫程式碼。所有事情都可以通過Visual Studio IDE中的點和單擊來完成。
Anchor屬性
正如名稱暗示的那樣,這個屬性迫使控制元件將其自身定位在父窗體或父控制元件中的某個相對或絕對位置。這個屬性有四個可以開啟或關閉的值:
- Top——表示控制元件中與父窗體(或父控制元件)相關的頂部應該保持固定。
- Bottom——表示控制元件中與父窗體(或父控制元件)相關的底邊應該保持固定。
- Left——表示控制元件中與父窗體(或父控制元件)相關的左邊緣應該保持固定。
- Right——表示控制元件中與父窗體(或父控制元件)相關的右邊緣應該保持固定。
要對一個控制元件設定Anchor屬性,只需在Visual Studio設計器中選擇控制元件,然後轉到屬性視窗。你會看到一個標註為“Anchor”的屬性。點選這個屬性值的部分,會出現一個小視窗讓你選擇想要賦予控制元件的錨點。圖表A所示是選擇了“頂邊、左邊”的anchor設定視窗。圖表B所示是選擇了“底邊、右邊”的視窗。
在Visual Studio中,當控制元件放置於窗體時,預設的anchor設定是“頂部、左邊”,這使得控制元件和窗體的頂邊和左邊緣固定相關。到真正發現不同的anchor設定對控制元件的影響時,你才能體會到錨定的意義。下面的影象會有所幫助。
圖表C所示是一個有十個子控制元件的窗體。每一個子控制元件都有不同的Anchor屬性值,並用它的anchor設定標註。灰白色控制元件後面的深紅色框是另一個子控制元件——它的Anchor屬性被設為頂部、底部、左邊和右邊。圖表D所示是區域被調大以後的同一個窗體。
正如你所看到的那樣,每一個控制元件在父窗體中都自動地保持它的位置。我們沒有編寫程式碼來完成這一點;只是簡單地設定了控制元件的Anchor屬性。有幾個重要的地方不得不提。一個就是如果你沒有指定一個控制元件有左或右錨定,它將在父窗體中保留一個相對左/右位置。如果你沒有指定一個控制元件是否有頂部或底部錨定,也是一樣的。對於這一點,一個很好的例子就是標註為“無Anchor”的控制元件。這樣的控制元件沒有錨定值,所以它只是漂浮在窗體中央。另一個極端就是選擇了所有anchor值的控制元件(頂部、底部、左邊、右邊)。對這一點,圖表C和圖表D中其它控制元件後面的深紅色方形可見物就是一個例子。當選擇了所有的anchor值時,控制元件只是在調整父窗體大小時,隨著增大和收縮——與窗體的邊緣比較起來它的所有邊緣保持靜止不變。
Dock屬性
Dock屬性迫使控制元件緊貼父窗體(或控制元件)的某個邊緣。雖然Anchor屬性也可以實現這一點,但是dock屬性使得你能夠在父窗體中讓子窗體可以在上方(或旁邊)互相“堆疊”。如果某個子窗體改變了大小,其它停駐在它旁邊的子窗體也會隨之改變。和Anchor屬性不同的是,你可以將Dock屬性設定為一個單值。有效值如下所示:
- Top——迫使控制元件位於父窗體(或控制元件)的頂部。如果有同一個父窗體的其它子控制元件也被設定為停駐在頂部的話,那麼控制元件將在彼此上方相互堆疊。
- Bottom——迫使控制元件位於父窗體(或控制元件)的底部。如果有同一個父窗體的其它子控制元件也被設定為停駐在底部的話,那麼控制元件將在彼此上方相互堆疊。
- Left——迫使控制元件位於父窗體(或控制元件)的左邊。如果有同一個父窗體的其它子控制元件也被設定為停駐在左邊的話,那麼控制元件將在彼此旁邊相互堆疊。
- Right——迫使控制元件位於父窗體(或控制元件)的右邊。如果有同一個父窗體的其它子控制元件也被設定為停駐在右邊的話,那麼控制元件將在彼此旁邊相互堆疊。
- Fill——迫使控制元件位於父窗體(或控制元件)的上方。如果有同一個父窗體的其它子控制元件也被設定為停駐在上方的話,那麼控制元件將在彼此上方相互堆疊。
- None——表示控制元件將會正常運轉。
要設定一個控制元件的Dock值,選擇Visual Studio中的控制元件,然後轉到屬性視窗。你會看到一個標註為“Dock”的屬性。點選這個屬性的值的部分,會出現一個小視窗讓你指定該控制元件將如何停駐。被賦予各種值的該窗體將顯示在以下影象中(圖表E、圖表F和圖表G):
和Anchor屬性一樣,直到發現它起了作用,你才會意識到它們的重要意義。圖表H所示的是一個有5個子控制元件的窗體,每個子窗體都設定了不同的dock值。
圖表I所示的是和圖表H一樣的視窗,除了一點,就是現在視窗已經被調整為更大的軌跡。
圖表J又顯示的是和圖表H一樣的視窗,這次不同的是位於窗體底部、頂部、左邊和右邊的控制元件變小了。注意位於窗體中間被設定為dock Fill的控制元件,自動變大了。
需要記住的是,對於Dock屬性,新增控制元件的順序會影響它們停駐的方式。例如,如果你對窗體新增控制元件A,指示其停駐填充,然後你對窗體新增控制元件B並指示其停駐頂部,控制元件B將覆蓋控制元件A的上部。原因就是控制元件B被認為是在控制元件A的“前方”,因為它是在控制元件A之後新增的。要解決這種情況,你必須在Visual Studio中右擊控制元件A,並在上下文選單中選擇“放到前面(Bring To Front)”。這樣就能使控制元件A出現在控制元件B的前方,控制元件也就能像預期的那樣運作了。
相關文章
- WinForm常用屬性ORM
- winform AutoScaleMode屬性ORM
- c# winform窗體相關屬性C#ORM
- defer 屬性和 async 屬性
- JavaScript私有屬性和靜態屬性JavaScript
- winform中textbox屬性Multiline=true時全選ORM
- 庫和屬性
- 屬性和方法
- Winform窗體的屬性頁沒有顯示篩選框ORM
- vue計算屬性和vue實力的屬性和方法Vue
- Winform 用string型別的屬性來繫結CheckBox薦ORM型別
- 屬性和監聽
- JavaScript公有屬性、私有屬性、公有方法和原型方法JavaScript原型
- C#屬性和lamdaC#
- SVG repeatCount和repeatDur屬性SVG
- Function方法和屬性圖Function
- javascript layerX和layerY屬性JavaScript
- [React]屬性和狀態React
- Jmeter屬性和變數JMeter變數
- 第 11 章 全域性屬性和其他
- css可繼承屬性和非繼承屬性一覽CSS繼承
- C#反射設定屬性值和獲取屬性值C#反射
- SQL Server 生成C#公共實體屬性和私有屬性SQLServerC#
- javascript獲取物件直接量中的屬性和屬性值JavaScript物件
- 獲取物件屬性型別、屬性名稱、屬性值的研究:反射和JEXL解析引擎物件型別反射
- CMake 屬性之全域性屬性
- Python類屬性和例項屬性分別是什麼?Python
- html中Position屬性值介紹和position屬性四種用法HTML
- Python的tkinter獲取元件屬性和設定元件屬性Python元件
- PHP動態屬性和stdclassPHP
- XML DOM – 屬性和方法概述XML
- javascript callee和caller屬性用法JavaScript
- 字串的常用屬性和方法字串
- maxlength和size屬性區別
- 實驗6 方法和屬性
- Transform-style和Perspective屬性ORM
- C#索引器和屬性C#索引
- 營銷屬性表和fm