How to: Write Event Handlers
The way you construct an event handler depends on how you want to associate it with events. The standard way to create an event handler is to use the Handles keyword with the WithEvents keyword. Visual Basic provides a second way to handle events: the AddHandler statement. AddHandler and RemoveHandler allow you to dynamically start and stop event handling for a specific event.
The WithEvents keyword allows you to create class or module-level object variables that can be used with the Handles clause in event handlers.
To handle events using WithEvents and the Handles clause
Create a simple class that contains an event.
In the class or module that will handle the event, use the WithEvents keyword to declare an object variable for the source of your events, as in the following example:
In the Code Editor, choose the WithEvents variable you just declared from the Class Name drop-down list on the left.
Choose the event you want to handle from the Method Name drop-down list on the right. The Code Editor creates the empty event-handler procedure with a Handles clause.
Note:This step is optional. You can create the event-handler procedure manually as long as the procedure you create is a subroutine, has the correct argument list to match the event being handled, and has a Handles clause that specifies the event being handled.
Add event-handling code to the event-handler procedure using the supplied arguments. The following code provides an example:
Public Sub ClassInst_AnEvent(ByVal EventNumber As Integer) _ Handles ClassInst.AnEvent MsgBox("Received event number: " & CStr(EventNumber)) End Sub
Public Sub ClassInst_AnEvent(ByVal EventNumber As Integer) _ Handles ClassInst.AnEvent MsgBox("Received event number: " & CStr(EventNumber)) End Sub
You can use the AddHandler statement to dynamically connect events with event-handler procedures.
To handle events using AddHandler
Create a subroutine to handle the event, as in the following example:
Declare an object variable of the class that is the source of the events you want to handle. Unlike a WithEvents variable, this can be a local variable in a procedure. For example:
Use the AddHandler statement to specify the name of the event sender, and the AddressOf statement to provide the name of your event handler. For example, add the following code to the end of the TestAddHandler subroutine:
Any procedure can serve as an event handler as long as it supports the correct arguments for the event being handled.
You can use the RemoveHandler statement to dynamically disconnect events from event-handler procedures.
To stop handling events using RemoveHandler
Use the RemoveHandler statement to specify the name of the event sender and the AddressOf statement to provide the name of your event handler. The syntax for RemoveHandler statements will always closely match the AddHandler statement used to start event handling. For example:
Derived classes—classes that inherit characteristics from a base class—can handle events raised by their base class using the Handles MyBase statement.
To handle events from a base class
Declare an event handler in the derived class by adding a Handles MyBase.eventname statement to the declaration line of your event-handler procedure, where eventname is the name of the event in the base class you are handling. For example:
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
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