共用方式為


HOW TO:撰寫事件處理常式

更新:2007 年 11 月

您建構事件處理常式的方法要視您如何建立其與事件的關聯而定。建立事件處理常式的標準方式,就是搭配使用 Handles 關鍵字和 WithEvents 關鍵字。Visual Basic 提供了處理事件的第二種方式:AddHandler 陳述式。AddHandler 和 RemoveHandler 讓您能夠針對特定的事件,動態地啟動和停止事件處理。兩種方法您都可以使用,但您不能在相同的事件中同時使用 WithEvents 和 AddHandler。

使用 WithEvents 處理事件

WithEvents 關鍵字允許您建立類別或模組層次的物件變數,其可與事件處理常式中的 Handles 子句一起使用。

若要使用 WithEvents 和 Handles 子句來處理事件

  1. 建立包含事件的簡單類別。

    Class Class1
        Public Event AnEvent(ByVal EventNumber As Integer)
    End Class
    
  2. 在處理事件的類別或模組中,於宣告區段使用 WithEvents 關鍵字,為事件的來源宣告物件變數,如下列範例所示:

    Public WithEvents ClassInst As Class1
    
  3. 在程式碼編輯器中,從左邊的 [類別名稱] 下拉式清單 (Drop-Down List) 選擇您剛才宣告的 WithEvents 變數。

  4. 從右邊的 [方法名稱] 下拉式清單選擇要處理的事件。程式碼編輯器會建立具有 Handles 子句的空白事件處理常式程序。

    注意事項:

    此步驟是具選擇性的。只要所建立的程序是副程式、具有與要處理事件相符的正確引數清單,以及具有指定要處理事件的 Handles 子句,您就可以手動建立事件處理常式程序。

  5. 使用提供的引數,將事件處理程式碼加入至事件處理常式程序。下列程式碼提供一個範例:

    Public Sub ClassInst_AnEvent(ByVal EventNumber As Integer) _
          Handles ClassInst.AnEvent
        MsgBox("Received event number: " & CStr(EventNumber))
    End Sub
    

使用 AddHandler 處理事件

您可以使用 AddHandler 陳述式,動態連接事件和事件處理常式程序。

若要使用 AddHandler 來處理事件

  1. 建立處理事件的副程式,如下列範例所示。

    Public Sub EHandler(ByVal EventNumber As Integer)
        MsgBox("Received event number " & CStr(EventNumber))
    End Sub
    
  2. 宣告類別的物件變數,這是您要處理事件的來源。與 WithEvents 變數不同,這可以是程序中的區域變數。例如:

    Public Sub TestAddHandler()
        Dim CI As New Class1
    End Sub
    
  3. 使用 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
    

請參閱

概念

事件和事件處理常式

委派和 AddressOf 運算子

AddHandler 和 RemoveHandler

參考

Handles

AddHandler 陳述式