Compartir a través de


Cómo suscribirse a eventos y controlarlos en Visual Basic

Un evento es una acción u ocurrencia —como un clic del ratón o un límite de crédito superado— que es reconocida por algún componente del programa, y para el cual puede escribir código para responder. Un controlador de eventos es el código que se escribe para responder a un evento.

En Visual Basic, hay dos aspectos en el manejo de eventos.

  • Publicación de eventos: las clases declaran eventos y los generan cuando ocurre algo interesante mediante la instrucción RaiseEvent. Esto es lo que realmente invoca (llama) a los controladores de eventos.
  • Suscripción a eventos: se suscribe a eventos mediante la identificación de procedimientos como controladores para eventos específicos. Puedes hacerlo con una Handles cláusula y una WithEvents variable, o con una instrucción AddHandler.

Un controlador de eventos en Visual Basic es un Sub procedimiento. Tu código no llama directamente a este, como otros Sub procedimientos. En su lugar, los publicadores de eventos invocan el procedimiento cuando se genera el evento, ya que el procedimiento está suscrito a dicho evento.

El uso de una Handles cláusula es la manera predeterminada de suscribirse a eventos en Visual Basic. Así es como los diseñadores escriben controladores de eventos al programar en el entorno de desarrollo integrado (IDE). La AddHandler instrucción es adecuada para suscribirse a eventos dinámicamente en tiempo de ejecución.

Cuando se produce el evento, Visual Basic llama automáticamente al procedimiento de controlador de eventos. Cualquier código que tenga acceso al evento puede provocar que se produzca mediante la ejecución de una instrucción RaiseEvent.

Puede asociar más de un controlador de eventos con el mismo evento. En algunos casos, puedes desasociar un controlador de un evento. Para obtener más información, vea Eventos.

Suscribirse a un evento mediante Handles y WithEvents

  1. Asegúrese de que el evento se declara con una Event Statement.

  2. Declare una variable de objeto en el nivel de módulo o clase mediante la WithEvents palabra clave . La As cláusula de esta variable debe especificar la clase que genera el evento.

  3. En la declaración del procedimiento de control Sub de eventos, agregue una Handles cláusula que especifique la WithEvents variable y el nombre del evento.

  4. Cuando se produce el evento, Visual Basic llama automáticamente al Sub procedimiento. El código puede usar una RaiseEvent instrucción para generar el evento e invocar todos los controladores suscritos.

    En el ejemplo siguiente se define un evento y una WithEvents variable que hace referencia a la clase que genera el evento. El procedimiento de control Sub de eventos usa una Handles cláusula para especificar la clase y el evento que controla.

    ' Example showing event handling with Handles and WithEvents
    Public Class EventPublisher
        Public Event SomethingHappened()
        
        Public Sub CauseEvent()
            ' Raise the event when something interesting happens
            RaiseEvent SomethingHappened()
        End Sub
    End Class
    
    Public Class EventSubscriber
        ' Declare a WithEvents variable
        Dim WithEvents eventObj As New EventPublisher
        
        ' Handle the event using Handles clause
        Public Sub ProcessHappen() Handles eventObj.SomethingHappened
            ' Insert code to handle somethingHappened event.
            Console.WriteLine("Event handled using Handles clause!")
        End Sub
        
        Public Sub TriggerEvent()
            eventObj.CauseEvent()
        End Sub
    End Class
    

Suscribirse a un evento mediante AddHandler

  1. Asegúrate de que el evento se declara con una Eventinstrucción de evento.

  2. Ejecute una instrucción AddHandler para conectar dinámicamente el procedimiento de control Sub de eventos con el evento .

  3. Cuando se produce el evento, Visual Basic llama automáticamente al Sub procedimiento. El código puede usar una RaiseEvent instrucción para generar el evento e invocar todos los controladores suscritos.

    En el ejemplo siguiente se usa la instrucción AddHandler en el constructor para asociar el OnTimerElapsed procedimiento como controlador de eventos para un evento de temporizador personalizado.

    ' Example showing event handling with AddHandler
    Public Class Timer
        Public Event TimerElapsed(ByVal message As String)
        
        Public Sub Start()
            ' Simulate timer elapsed
            RaiseEvent TimerElapsed("Timer has elapsed!")
        End Sub
    End Class
    
    Public Class Application
        Private appTimer As New Timer()
        
        Sub New()
            ' Use AddHandler to dynamically associate event handler
            AddHandler appTimer.TimerElapsed, AddressOf OnTimerElapsed
        End Sub
    
        Private Sub OnTimerElapsed(ByVal message As String)
            ' Insert code to handle timer elapsed event
            Console.WriteLine($"Handling timer event: {message}")
        End Sub
        
        Public Sub StartTimer()
            appTimer.Start()
        End Sub
    End Class
    

    Puede desasociar un controlador de eventos de un evento ejecutando la instrucción RemoveHandler.

Consulte también