HOW TO:撰寫事件處理常式
更新:2007 年 11 月
您建構事件處理常式的方法要視您如何建立其與事件的關聯而定。建立事件處理常式的標準方式,就是搭配使用 Handles 關鍵字和 WithEvents 關鍵字。Visual Basic 提供了處理事件的第二種方式:AddHandler 陳述式。AddHandler 和 RemoveHandler 讓您能夠針對特定的事件,動態地啟動和停止事件處理。兩種方法您都可以使用,但您不能在相同的事件中同時使用 WithEvents 和 AddHandler。
使用 WithEvents 處理事件
WithEvents 關鍵字允許您建立類別或模組層次的物件變數,其可與事件處理常式中的 Handles 子句一起使用。
若要使用 WithEvents 和 Handles 子句來處理事件
建立包含事件的簡單類別。
Class Class1 Public Event AnEvent(ByVal EventNumber As Integer) End Class
在處理事件的類別或模組中,於宣告區段使用 WithEvents 關鍵字,為事件的來源宣告物件變數,如下列範例所示:
Public WithEvents ClassInst As Class1
在程式碼編輯器中,從左邊的 [類別名稱] 下拉式清單 (Drop-Down List) 選擇您剛才宣告的 WithEvents 變數。
從右邊的 [方法名稱] 下拉式清單選擇要處理的事件。程式碼編輯器會建立具有 Handles 子句的空白事件處理常式程序。
注意事項: 此步驟是具選擇性的。只要所建立的程序是副程式、具有與要處理事件相符的正確引數清單,以及具有指定要處理事件的 Handles 子句,您就可以手動建立事件處理常式程序。
使用提供的引數,將事件處理程式碼加入至事件處理常式程序。下列程式碼提供一個範例:
Public Sub ClassInst_AnEvent(ByVal EventNumber As Integer) _ Handles ClassInst.AnEvent MsgBox("Received event number: " & CStr(EventNumber)) End Sub
使用 AddHandler 處理事件
您可以使用 AddHandler 陳述式,動態連接事件和事件處理常式程序。
若要使用 AddHandler 來處理事件
建立處理事件的副程式,如下列範例所示。
Public Sub EHandler(ByVal EventNumber As Integer) MsgBox("Received event number " & CStr(EventNumber)) End Sub
宣告類別的物件變數,這是您要處理事件的來源。與 WithEvents 變數不同,這可以是程序中的區域變數。例如:
Public Sub TestAddHandler() Dim CI As New Class1 End Sub
使用 AddHandler 陳述式指定事件傳送者的名稱,並使用 AddressOf 陳述式提供事件處理常式的名稱。例如,請將下列程式碼加入 TestAddHandler 副程式的結尾:
AddHandler CI.AnEvent, AddressOf EHandler
只要程序能夠支援要處理事件的正確引數,它就可以當做事件處理常式來使用。
使用 RemoveHandler 停止處理事件
您可以使用 RemoveHandler 陳述式,動態中斷事件和事件處理常式程序的連接。
若要使用 RemoveHandler 停止處理事件
使用 RemoveHandler 陳述式指定事件傳送者的名稱,並使用 AddressOf 陳述式提供事件處理常式的名稱。RemoveHandler 陳述式的語法一定會符合用於啟動事件處理作業的 AddHandler 陳述式。例如:
RemoveHandler CI.AnEvent, AddressOf EHandler
處理自基底類別繼承的事件
「衍生類別」(Derived Class) 是自基底類別 (Base Class) 繼承特性的類別,能夠使用 HandlesMyBase 陳述式處理由基底類別所引發的事件。
若要處理來自於基底類別的事件
在衍生類別中宣告事件處理常式,方式便是將 Handles MyBase.eventname 陳述式加入至事件處理常式程序的宣告列,其中 eventname 是基底類別中所要處理之事件的名稱。例如:
Public Class BaseClass Public Event BaseEvent(ByVal i As Integer) ' Place methods and properties here. End Class Public Class DerivedClass Inherits BaseClass Sub EventHandler(ByVal x As Integer) Handles MyBase.BaseEvent ' Place code to handle events from BaseClass here. End Sub End Class