Cómo: Escribir controladores de eventos
Actualización: noviembre 2007
La forma de crear un controlador de eventos depende de cómo quiera asociarlo a los eventos. La manera estándar de crear un controlador de eventos consiste en usar la palabra clave Handles con la palabra clave WithEvents. Visual Basic proporciona una segunda forma de controlar los eventos: la instrucción AddHandler. AddHandler y RemoveHandler le permiten iniciar y detener dinámicamente el control de un evento específico. Es posible utilizar ambos enfoques, pero no se debe utilizar WithEvents y AddHandler en el mismo evento.
Controlar eventos mediante WithEvents
La palabra clave WithEvents permite crear variables de objeto en el nivel de módulo o clase que pueden utilizarse con la cláusula Handles en controladores de eventos.
Para controlar eventos mediante WithEvents y la cláusula Handles
Cree una clase simple que contiene un evento.
Class Class1 Public Event AnEvent(ByVal EventNumber As Integer) End Class
En la clase o el módulo que controlará el evento, utilice la palabra clave WithEvents para declarar una variable de objeto para el código fuente de los eventos, como en el ejemplo siguiente:
Public WithEvents ClassInst As Class1
En el Editor de código, elija la variable WithEvents que acaba de declarar en la lista desplegable Nombre de clase de la parte izquierda.
Elija el evento que desea controlar de la lista desplegable Method Name en la parte derecha. El Editor de código crea el procedimiento controlador de eventos vacío con una cláusula Handles.
Nota: Este paso es opcional. Puede crear el procedimiento controlador de eventos de forma manual mientras el procedimiento que se crea sea una subrutina, tenga la lista de argumentos correcta para que coincida con el evento que se controla y tenga una cláusula Handles que especifique el evento que se controla.
Agregue código de control de eventos al procedimiento controlador de eventos utilizando los argumentos suministrados. El código siguiente proporciona un ejemplo:
Public Sub ClassInst_AnEvent(ByVal EventNumber As Integer) _ Handles ClassInst.AnEvent MsgBox("Received event number: " & CStr(EventNumber)) End Sub
Controlar eventos mediante AddHandler
Se puede utilizar la instrucción AddHandler para conectar de forma dinámica eventos a procedimientos controladores de eventos.
Para controlar eventos mediante AddHandler
Cree una subrutina para controlar el evento, como en el ejemplo siguiente:
Public Sub EHandler(ByVal EventNumber As Integer) MsgBox("Received event number " & CStr(EventNumber)) End Sub
Declare una variable de objeto de la clase que sea el origen de los eventos y que desea controlar. A diferencia de la variable WithEvents, puede ser una variable local en un procedimiento. Por ejemplo:
Public Sub TestAddHandler() Dim CI As New Class1 End Sub
Utilice la instrucción AddHandler para especificar el nombre del remitente del evento, y la instrucción AddressOf para proporcionar el nombre del controlador de eventos. Por ejemplo, agregue el código siguiente al final de la subrutina TestAddHandler:
AddHandler CI.AnEvent, AddressOf EHandler
Cualquier procedimiento puede servir como controlador de eventos siempre que admita los argumentos correctos para el evento que se controla.
Utilizar RemoveHandler para detener el control de eventos
Puede utilizar la instrucción RemoveHandler para desconectar de forma dinámica eventos de procedimientos controladores de eventos.
+Para detener el control de eventos con RemoveHandler
Utilice la instrucción RemoveHandler para especificar el nombre del remitente del evento y la instrucción AddressOf para proporcionar el nombre del controlador de eventos. La sintaxis para las instrucciones RemoveHandler siempre coincidirá exactamente con la instrucción AddHandler utilizada para iniciar el control de eventos. Por ejemplo:
RemoveHandler CI.AnEvent, AddressOf EHandler
Controlar eventos heredados de una clase base
Las clases derivadas (clases que heredan características de una clase base) pueden controlar eventos provocados por su clase base mediante la instrucción HandlesMyBase.
Controlar eventos de una clase base
Declare un controlador de eventos en la clase derivada agregando una instrucción Handles MyBase.nombreDeEvento a la línea de declaración del procedimiento controlador de eventos, donde nombreDeEvento es el nombre del evento de la clase base que está controlando. Por ejemplo:
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
Vea también
Conceptos
Eventos y controladores de eventos
Los delegados y el operador AddressOf