VB.NET窗體嵌套正確應(yīng)用法則
VB.NET對(duì)于窗體的操作有很多種,編程人員在實(shí)際開(kāi)發(fā)中可以根據(jù)自己不同的需求來(lái)進(jìn)行自己需要的一種操作。今天我們?yōu)榇蠹規(guī)?lái)的則是有關(guān)VB.NET窗體嵌套的一些操作方法,希望能夠幫助大家解決一些問(wèn)題。#t#
.NET框架組件太大了,比任何以前所寫(xiě)的封裝功能的庫(kù)都要大。這樣有好處,因?yàn)樗蠓鳒p了建立應(yīng)用程序所需編寫(xiě)的代碼,但是也使我們不可能完全了解該框架組件。但是我們很容易從中找到一些技巧。
窗體嵌套
經(jīng)驗(yàn)豐富的Visual Basic開(kāi)發(fā)者知道多文檔界面(MDI)應(yīng)用程序能夠包含子窗體,那些子窗體由MDI父窗體管理。但是如果沒(méi)有MDI的能力你怎樣實(shí)現(xiàn)包含VB.NET窗體嵌套?例如一個(gè)MDI子窗體也可能需要包含另一個(gè)窗體。
有時(shí)能夠使用用戶(hù)控件(UserControl)實(shí)現(xiàn)這種功能,但是如果你真的需要把一個(gè)窗體嵌套進(jìn)另一個(gè)窗體,有多種方法可以實(shí)現(xiàn)。窗體衍生自Control類(lèi),這意味著它能被放入另一個(gè)窗體的控件集合中,使用如下的邏輯:
- Dim f As New
frmEmbed2()- Me.Controls.Add(f)
- f.Show()
但是很不幸,這段代碼將會(huì)導(dǎo)致一個(gè)運(yùn)行時(shí)(runtime)異常。為了避免這種異常,該窗體的TopLevel屬性必須設(shè)置為False(見(jiàn)下面的代碼)。
- Dim f As New frmEmbed2()
- f.TopLevel = False
- Me.Controls.Add(f)
- f.Show()
VB.NET窗體嵌套有一個(gè)標(biāo)題條(它的顏色是未激活的系統(tǒng)顏色),因此該VB.NET窗體嵌套能在容器窗體內(nèi)四處拖動(dòng)。在圖2中,該窗體從它的開(kāi)始位置(左上角)拖到了右下角。
通常在顯示嵌入的窗體前先設(shè)置它的位置。這只需要簡(jiǎn)單的設(shè)置嵌入窗體的Left和Top屬性。嵌入窗體的位置與容器窗體是相對(duì)的。
與MDI子窗體不同,嵌入窗體能覆蓋容器窗體上的控件。圖3顯示了它們的不同。
在右邊的MDI例子中,沒(méi)有辦法使按鈕隱藏在子窗體的后面。但是在左邊該按鈕被嵌入窗體覆蓋了。
當(dāng)窗體***次被嵌入時(shí),它將顯示在容器窗體上的已存在的控件的后面。當(dāng)它被點(diǎn)擊時(shí),它走向前臺(tái)并停留在那兒。這會(huì)打擾用戶(hù),但是能通過(guò)插入下面的代碼防止這種情況發(fā)生:
- f.BringToFront()
VB.NET窗體嵌套可以包含其它的嵌入窗體,沒(méi)有實(shí)際的限制。