Events are modeled as attributes with a stereotype of <<Event>>, and with one or two linked operations representing the add and/or remove handlers
You declare events within classes, structures, modules, and interfaces using the Event keyword, as in the following example:
Event AnEvent(ByVal EventNumber As Integer)
An event is like a message announcing that something important has occurred. The act of broadcasting the message is called raising the event.
Events must be raised within the scope where they are declared. For example, a derived class cannot raise events inherited from a base class.
Any object capable of raising an event is an event sender, also known as an event source. Forms, controls, and user-defined objects are examples of event senders.
Event handlers are procedures that are called when a corresponding event occurs. You can use any valid subroutine as an event handler. You cannot use a function as an event handler, however, because it cannot return a value to the event source.
Visual Basic uses a standard naming convention for event handlers that combines the name of the event sender, an underscore, and the name of the event. For example, the click event of a button named button1 would be named Sub button1_Click. It is recommended that you use this naming convention when defining event handlers for your own events, but it is not required; you can use any valid subroutine name.
Before an event handler becomes usable, you must first associate it with an event by using either the Handles or AddHandler statement.
The WithEvents statement and Handles clause provide a declarative way of specifying event handlers. Events raised by an object declared with WithEvents can be handled by any subroutine with a Handles clause that names this event. Although the Handles clause is the standard way of associating an event with an event handler, it is limited to associating events with event handlers at compile time.
The AddHandler and RemoveHandler statements are more flexible than the Handles clause. They allow you to dynamically connect and disconnect the events with one or more event handlers at run time, and they do not require you to declare object variables using WithEvents.