如何:在 Visual Basic 中调用事件处理程序

“事件”是可被某程序组件识别的操作或事件(如鼠标单击或超出信用限额),可以为它编写响应代码。 “事件处理程序”是为响应事件而编写的代码。

Visual Basic 中的事件处理程序是一个 Sub 过程。 但是调用它的方法通常与调用其他 Sub 过程的方法不同。 相反,将此过程标识为事件的处理程序。 可以使用一个 Handles 子句 (Visual Basic) 子句和一个 WithEvents (Visual Basic) 变量,或一个 AddHandler 语句 来执行此操作。 使用 Handles 子句是在 Visual Basic 中声明事件处理程序的默认方式。 在集成开发环境 (IDE) 中编程时通过设计器编写事件处理程序便使用这种方式。 AddHandler 语句适用于在运行时动态引发事件。

事件发生时,Visual Basic 自动调用事件处理程序过程。 对此事件具有访问权限的任何代码都可以通过执行 RaiseEvent 语句 引起此事件。

可以使多个事件处理程序与同一事件关联。 在某种情况下,可以取消处理程序与事件的关联。 有关更多信息,请参见 事件 (Visual Basic)

使用 Handles 和 WithEvents 调用事件处理程序

  1. 请确保事件是以 Event 语句声明的。

  2. 使用 WithEvents (Visual Basic) 关键字在模块或类级别声明一个对象变量。 此变量的 As 子句必须指定引发此事件的类。

  3. 在负责事件处理的 Sub 过程的声明中,添加指定 WithEvents 变量和事件名称的 Handles 子句 (Visual Basic) 子句。

  4. 事件发生时,Visual Basic 自动调用 Sub 过程。 代码可以使用 RaiseEvent 语句引发事件。

    下面的示例定义一个事件和一个指向引用引发事件的类的 WithEvents 变量。 处理事件的 Sub 过程使用 Handles 子句指定它处理的类和事件。

    Public Class raisesEvent
        Public Event somethingHappened()
        Dim WithEvents happenObj As New raisesEvent
        Public Sub processHappen() Handles happenObj.somethingHappened
            ' Insert code to handle somethingHappened event. 
        End Sub 
    End Class
    

使用 AddHandler 调用事件处理程序

  1. 请确保事件是以 Event 语句声明的。

  2. 执行 AddHandler 语句,以动态方式将处理事件的 Sub 过程连接到事件。

  3. 事件发生时,Visual Basic 自动调用 Sub 过程。 代码可以使用 RaiseEvent 语句引发事件。

    下面的示例定义 Sub 过程以处理窗体的 Closing 事件。 它接着使用 AddHandler 语句 与作为 Closing 的事件处理程序的 catchClose 过程关联。

    ' Place these procedures inside a Form class definition. 
    Private Sub catchClose(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
        ' Insert code to deal with impending closure of this form. 
    End Sub 
    Public Sub formOpened()
        AddHandler Me.Closing, AddressOf catchClose
    End Sub
    

    可以通过执行 RemoveHandler 语句 取消事件处理程序与事件的关联。

请参见

任务

如何:创建过程 (Visual Basic)

如何:调用不返回值的过程 (Visual Basic)

参考

Sub 语句 (Visual Basic)

AddressOf 运算符 (Visual Basic)

概念

Visual Basic 中的过程

Sub 过程 (Visual Basic)