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

  1. Cree una clase simple que contiene un evento.

    Class Class1
        Public Event AnEvent(ByVal EventNumber As Integer)
    End Class
    
  2. 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
    
  3. 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.

  4. 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.

  5. 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

  1. 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
    
  2. 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
    
  3. 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

AddHandler y RemoveHandler

Referencia

Handles

AddHandler (Instrucción)