程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB.NET >> VB.NET之旅(十一)—可視繼承

VB.NET之旅(十一)—可視繼承

編輯:VB.NET

閉關修練了一晚上VB.NET的繼承程序的我,早上進入公司時自信滿滿。白經理 看到我,問了一句:“學習得怎麼樣?對VB.NET是不是已經可以上手了? ”我點了點頭:“應該可以做點事了吧。”“好的, ”白經理拍了拍我肩膀說,“再跟大李好好學習幾天,會有機會的。 ”

得到領導的指示,我沖了杯咖啡,恭敬地走向大李,放在他的桌 上。大李嘴角一翹,笑著說:“別這麼客氣,來,坐。讓我看看你昨天繼承 學習得怎麼樣。今天我們來看一下VB.NET提供的新的繼承方式,可視化繼承。 ”

“可視化?是不是就是指在可視化編輯器裡就可以實現的繼 承方式?”我跟著問了一句。

大李點頭說:“當然,就是看得 見的繼承。一般指的就是對窗體的繼承。”

我想了一下說:“ 在VB.NET中,窗體都已經是類的形式了,如果要實現窗體繼承,是不是生成一個 基類窗體,然後通過聲明Inherits的方式在新窗體中實現對基類窗體的繼承? ”

“大體上是這樣的,但今天我們來看一下怎麼通過可視化編 譯環境來實現這個過程。首先,是建一個基類窗體。”大李一邊說,一邊打 開VB.NET編譯器,從菜單中選擇從“文件”菜單中依次選擇“新 建”和“項目”,打開“新建項目”對話框。創建了 一個名為 “可視繼承”的 Windows 應用程序。

然後右擊解決 方案資源管理器中的“可視繼承”項目節點並選擇“屬性 ”。在項目的屬性中,將輸出類型從“Windows 應用程序”更改 為“類庫”,然後單擊“確定”。

在“工具 箱”的“Windows 窗體”選項卡上將一個按鈕添加到窗體中。命 名為btnProtected。然後在它的“屬性”窗口中,將 Text 屬性設置 為 “保護”,同時將 Modifiers 屬性設置為 Protected。

接 著大李雙擊 btnProtected 按鈕,切換到代碼窗口,書寫了這樣的代碼:

Private Sub btnProtected_Click(ByVal sender As 

System.Object, _ 
 ByVal e As System.EventArgs) Handles btnProtected.Click 
    MsgBox("protected的按鈕") 
End Sub

接著切換回設計窗口,添加了第二個按鈕btnPrivate,並將 Text 屬性設置為 “私有”, Modifiers 屬性設置為 Private。

雙擊 btnPrivate 按鈕,添加了如下代碼:

Private Sub 

btnPrivate_Click(ByVal sender As System.Object, _ 
ByVal e As System.EventArgs) Handles btnPrivate.Click 
    MsgBox("private的按鈕") 
End Sub

最後從“生成”菜單中選擇“生成”, 在項目的bin文件夾內生成了一個“可視繼承.dll”文件。

“是不是這樣就可以完成基類窗體的建造了? ”

“是呀。”大李手也沒停地說,“我們再通過集 成環境來建一個派生的窗體吧。”

大李從“文件”菜單 中選擇“添加項目”中的“新建項目”,創建了一個名為 “派生窗體”的Windows 應用程序。右擊項目節點,選擇“添加 ”中的“繼承的窗體”。

在彈出的“添加新項 ”對話框中,可以看到已經選定了“繼承的窗體”,大李點擊了 “打開”。又彈出一個“繼承選擇器”對話框中,從 “可視繼承.dll”中選擇“Form1”作為要從其中繼承的窗 體,然後單擊“確定”。

於是在“派生窗體”項目 中創建了一個從 “可視繼承”項目中的窗體Form1派生出的窗體,命 名為“InheritanceForm”。

隨即在Windows 窗體設計器中, 派生窗體的繼承而來的按鈕左上角會帶有一個箭頭標志符號。

大李拖動了 一下“保護”按鈕,並任意地更改了一下按鈕的大小。然後,轉過頭 來對我說:“你來試試改變一下‘私有’按鈕的大小吧。 ”我不以為然的接過鼠標,可是,任憑我如何點擊,拖拽,它仍巋然不動。

“啊?出了什麼問題?”我大吃一驚。

“自已想 想喽。”大李開始品味我倒給他的咖啡了。

我開始在大腦裡搜索起 這兩天學習的內容,慢慢地轉過彎來,“私有”按鈕在基類窗體內修 飾符被大李設為“Private”,也就是說它在派生類中也不可被更改。 我小心翼翼地向大李說明我的想法。

“沒錯,別怕說錯嘛。” 大李點了點頭,“在窗體中的控件屬性也會跟著修飾符的設置而決定派生類 能否對其進行更改。這個按鈕被設為了Private,它的大小與位置屬性當然在派生 類中也無法被更改喽。”

看到我若有所思地點著頭,大李給我出了 道題:“你來試試改變一下在派生窗體中,點擊‘保護’按鈕時 彈出消息框的內容,就改為‘派生的保護按鈕’吧。”

我跟大李在基類窗體中操作地一樣,雙擊了該按鈕,切換到代碼窗口。寫了這句 代碼:

Private Sub btnProtected_Click(ByVal sender As 

System.Object, _ 
ByVal e As System.EventArgs) Handles btnProtected.Click 
    MsgBox("派生的保護按鈕") 
End Sub

接著,我右擊解決方案資源管理器中的 “派生窗體 ” 項目並選擇“設為啟動項目”。然後,右擊解決方案資源管 理器中的 “派生窗體”項目並選擇“屬性”。在“ 派生窗體 屬性頁”對話框中,將“啟動對象”設置為繼承的窗 體InheritanceForm。

按 F5 鍵運行應用程序,滿懷欣喜地點擊了一下 “保護”按鈕。咦,結果彈出了兩個消息框,第一個彈出的是基類窗 體中寫的按鈕消息內容“Protected的按鈕”,然後才彈出剛寫的消息 “派生的保護按鈕”。我一下就愣住了,“我不是已經改寫了 click事件響應程序的代碼了嗎?為什麼基類的消息沒有屏蔽掉?”

大李悠悠然喝下一口咖啡,放下杯子。拍了拍我說:“屏蔽?你能屏蔽基類 私有的成員嗎?”

“啊?”我趕緊看了一下基類窗體中 的click事件處理程序。“真的呢,是private sub!”我傻傻地笑起 來。

“對於窗體編程而言,默認的是對自身的處理,沒有考慮到對 它的繼承,所以控件的事件處理程序都是以private來修飾的,用於封裝。但是修 改也很容易,不是嗎?”大李又拍了拍我,起身出門了。

我拼命地 搓了搓臉,開始回憶了一下實現繼承的方法,終於開始動手改程序。

首先 ,在基類窗體中寫:

Protected Overridable Sub 

btnProtected_Click(ByVal sender As System.Object, ByVal e As 

System.EventArgs) Handles btnProtected.Click 
    MsgBox("protected的控件") 
End Sub

我正准備到派生類中改寫代碼,大李又回來了,他站到我身後 說:“你先別急著寫,看一下代碼窗口上方的兩個下拉框,左邊一個是類名 ,你選擇一下InheritanceForm類的overrides,在右邊的方法名稱下拉框中就會 出現可重寫的方法的名稱了。”

我按大李的話做,果然,在方法名 稱下拉框中看到了btnProtected_Click,點擊一下,就會出現該方法的空白代碼 段,我往代碼段裡添加了一句消息框的內容:

Protected Overrides 

Sub btnProtected_Click(ByVal sender As Object, _ 
ByVal e As System.EventArgs) 
    MsgBox("派生的保護按鈕") 
End Sub

運行!點擊一下“保護”按鈕,果然只出現了一個 消息框:“派生的保護按鈕”。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved