NET框架組件太大了比任何以前所寫的封裝功能的庫都要大這樣有好處因為它大幅削減了建立應用程序所需編寫的代碼但是也使我們不可能完全了解該框架組件但是我們很容易從中找到一些技巧
窗體嵌套
經驗豐富的Visual Basic開發者知道多文檔界面(MDI)應用程序能夠包含子窗體那些子窗體由MDI父窗體管理但是如果沒有MDI的能力你怎樣實現包含嵌套窗體?例如一個MDI子窗體也可能需要包含另一個窗體
有時能夠使用用戶控件(UserControl)實現這種功能但是如果你真的需要把一個窗體嵌套進另一個窗體有多種方法可以實現窗體衍生自Control類這意味著它能被放入另一個窗體的控件集合中使用如下的邏輯
Dim f As New frmEmbed()
MeControlsAdd(f)
fShow()
但是很不幸這段代碼將會導致一個運行時(runtime)異常(見圖)
圖試圖把一個窗體添加到另一個窗體的控件集合時出現的運行時錯誤
為了避免這種異常該窗體的TopLevel屬性必須設置為False(見下面的代碼)
Dim f As New frmEmbed()
fTopLevel = False
MeControlsAdd(f)
fShow()
圖顯示的是使用上面的邏輯實現的一個窗體嵌入另一個窗體嵌入的窗體有一個標題條(它的顏色是未激活的系統顏色)因此該嵌入窗體能在容器窗體內四處拖動在圖中該窗體從它的開始位置(左上角)拖到了右下角
圖在容器窗體中有一個嵌入的窗體嵌入的窗體能在容器窗體中拖動
通常在顯示嵌入的窗體前先設置它的位置這只需要簡單的設置嵌入窗體的Left和Top屬性嵌入窗體的位置與容器窗體是相對的
與MDI子窗體不同嵌入窗體能覆蓋容器窗體上的控件圖顯示了它們的不同
圖嵌入窗體(左)可以覆蓋容器窗體上的控件MDI子窗體(右)不能覆蓋MDI父窗體上的控件
在右邊的MDI例子中沒有辦法使按鈕隱藏在子窗體的後面但是在左邊該按鈕被嵌入窗體覆蓋了
當窗體第一次被嵌入時它將顯示在容器窗體上的已存在的控件的後面當它被點擊時它走向前台並停留在那兒這會打擾用戶但是能通過插入下面的代碼防止這種情況發生
fBringToFront()
嵌入的窗體可以包含其它的嵌入窗體沒有實際的限制圖顯示了一個本身包含嵌入的窗體的嵌入窗體
圖一個包含嵌入窗體的嵌入窗體
From:http://tw.wingwit.com/Article/program/net/201311/12398.html