有一點(diǎn)讓許多剛接觸WinForms編程的開發(fā)者感到很棘手,就是在用戶調(diào)整各種控件的大小時(shí),怎樣使它們的窗體保持同步,并與父窗體相稱。這可以成為一種讓人非常沮喪的情況,尤其是對于有著Web編程背景,轉(zhuǎn)為WinForms的開發(fā)者來說。 為了緩解這個(gè)問題,.NET框架允許你對子控件設(shè)置屬性,命令在調(diào)整父窗體大小時(shí),它們應(yīng)該如何運(yùn)作。用來命令控件在調(diào)整大小時(shí)動(dòng)作的兩個(gè)屬性就是“Dock”和“Anchor”。 Dock和Anchor通過將控件連接到它們父窗體的某個(gè)位置,而免除了使應(yīng)用程序具有不可預(yù)知界面的麻煩。最好的一點(diǎn)就是設(shè)立這些屬性不需要任何手寫代碼。所有事情都可以通過Visual Studio IDE中的點(diǎn)和單擊來完成。 Anchor屬性 正如名稱暗示的那樣,這個(gè)屬性迫使控件將其自身定位在父窗體或父控件中的某個(gè)相對或絕對位置。這個(gè)屬性有四個(gè)可以開啟或關(guān)閉的值: 要對一個(gè)控件設(shè)置Anchor屬性,只需在Visual Studio設(shè)計(jì)器中選擇控件,然后轉(zhuǎn)到屬性窗口。你會(huì)看到一個(gè)標(biāo)注為“Anchor”的屬性。點(diǎn)擊這個(gè)屬性值的部分,會(huì)出現(xiàn)一個(gè)小窗口讓你選擇想要賦予控件的錨點(diǎn)。圖表A所示是選擇了“頂邊、左邊”的anchor設(shè)置窗口。圖表B所示是選擇了“底邊、右邊”的窗口。
在Visual Studio中,當(dāng)控件放置于窗體時(shí),默認(rèn)的anchor設(shè)置是“頂部、左邊”,這使得控件和窗體的頂邊和左邊緣固定相關(guān)。 到真正發(fā)現(xiàn)不同的anchor設(shè)置對控件的影響時(shí),你才能體會(huì)到錨定的意義。下面的圖像會(huì)有所幫助。
圖表C所示是一個(gè)有十個(gè)子控件的窗體。每一個(gè)子控件都有不同的Anchor屬性值,并用它的anchor設(shè)置標(biāo)注。灰白色控件后面的深紅色框是另一個(gè)子控件——它的Anchor屬性被設(shè)為頂部、底部、左邊和右邊。圖表D所示是區(qū)域被調(diào)大以后的同一個(gè)窗體。
正如你所看到的那樣,每一個(gè)控件在父窗體中都自動(dòng)地保持它的位置。我們沒有編寫代碼來完成這一點(diǎn);只是簡單地設(shè)置了控件的Anchor屬性。 有幾個(gè)重要的地方不得不提。一個(gè)就是如果你沒有指定一個(gè)控件有左或右錨定,它將在父窗體中保留一個(gè)相對左/右位置。如果你沒有指定一個(gè)控件是否有頂 部或底部錨定,也是一樣的。對于這一點(diǎn),一個(gè)很好的例子就是標(biāo)注為“無Anchor”的控件。這樣的控件沒有錨定值,所以它只是漂浮在窗體中央。 另一個(gè)極端就是選擇了所有anchor值的控件(頂部、底部、左邊、右邊)。對這一點(diǎn),圖表C和圖表D中其它控件后面的深紅色方形可見物就是一個(gè)例子。當(dāng)選擇了所有的anchor值時(shí),控件只是在調(diào)整父窗體大小時(shí),隨著增大和收縮——與窗體的邊緣比較起來它的所有邊緣保持靜止不變。 Dock屬性 Dock屬性迫使控件緊貼父窗體(或控件)的某個(gè)邊緣。雖然Anchor屬性也可以實(shí)現(xiàn)這一點(diǎn),但是dock屬性使得你能夠在父窗體中讓子窗體可以在上方(或旁邊)互相“堆疊”。如果某個(gè)子窗體改變了大小,其它停駐在它旁邊的子窗體也會(huì)隨之改變。 和Anchor屬性不同的是,你可以將Dock屬性設(shè)置為一個(gè)單值。有效值如下所示:
|
|