AddHandler 语句

在运行时将事件与事件处理程序相关联。

语法

AddHandler event, {AddressOf eventhandler | expression }

组成部分

组成部分 说明
event 要处理的事件的名称。
eventhandler 处理事件的过程的名称。
expression 处理事件的 lambda 表达式。

AddressOf eventhandlerexpression 部分是互斥的。

注解

使用 AddHandlerRemoveHandler 语句,可以在程序执行过程中随时启动和停止事件处理。

新事件处理程序(eventhandler 过程或 expression lambda)的签名必须与 event 事件的签名相匹配。

Handles 关键字和 AddHandler 语句都允许你指定特定过程处理特定事件,但存在差异。 AddHandler 语句在运行时将过程连接到事件。 定义过程时使用 Handles 关键字,以指定它处理特定事件。 有关详细信息,请参见句柄

使用显式 lambda 添加的处理程序以后无法删除(使用 RemoveHandler)。 事实上,如果不为 lambda 指定名称,以后就不能引用它。 但将 lambda 赋给变量并通过此变量添加处理程序,可以使用此变量删除处理程序。

注意

对于自定义事件,AddHandler 语句调用事件的 AddHandler 访问器。 有关自定义事件的详细信息,请参阅事件语句

示例

Sub TestEvents()
    Dim Obj As New Class1
    ' Associate an event handler with an event.
    AddHandler Obj.Ev_Event, AddressOf EventHandler
    ' Call the method to raise the event.
    Obj.CauseSomeEvent()
    ' Stop handling events.
    RemoveHandler Obj.Ev_Event, AddressOf EventHandler
    ' This event will not be handled.
    Obj.CauseSomeEvent()
    ' Associate an event handler with an event, using a lambda.
    ' This handler cannot be removed.
    AddHandler Obj.Ev_Event, Sub ()
        MsgBox("Lambda caught event.")
    End Sub
    ' This event will be handled by the lambda above.
    Obj.CauseSomeEvent()
End Sub

Sub EventHandler()
    ' Handle the event.
    MsgBox("EventHandler caught event.")
End Sub

Public Class Class1
    ' Declare an event.
    Public Event Ev_Event()
    Sub CauseSomeEvent()
        ' Raise an event.
        RaiseEvent Ev_Event()
    End Sub
End Class

另请参阅