Partilhar via


Como assinar eventos e manipulá-los no Visual Basic

Um evento é uma ação ou ocorrência — como um clique do mouse ou um limite de crédito excedido — que é reconhecida por algum componente do programa e para a qual você pode escrever código para responder. Um manipulador de eventos é o código que você escreve para responder a um evento.

No Visual Basic, há dois lados para trabalhar com eventos:

  • Publicação de eventos — As classes declaram eventos e os acionam quando algo interessante acontece usando a Instrução RaiseEvent. Isso é o que realmente invoca (chama) os manipuladores de eventos.
  • Assinatura de eventos — Assinam-se eventos identificando-se procedimentos como manipuladores para eventos específicos. Você pode fazer isso com uma Handles cláusula e uma WithEvents variável ou com uma declaração AddHandler.

Um manipulador de eventos no Visual Basic é um Sub procedimento. O seu código não o invoca diretamente como outros procedimentos Sub. Em vez disso, os editores de eventos invocam o procedimento quando o evento é gerado porque o procedimento está inscrito no evento.

Usar uma Handles cláusula é a maneira padrão de assinar eventos no Visual Basic. É assim que os manipuladores de eventos são escritos pelos designers quando você programa no ambiente de desenvolvimento integrado (IDE). A instrução AddHandler é adequada para assinar eventos dinamicamente em execução.

Quando o evento ocorre, o Visual Basic chama automaticamente o procedimento do manipulador de eventos. Qualquer código que tenha acesso ao evento pode fazer com que ele ocorra executando uma instrução RaiseEvent.

Você pode associar mais de um manipulador de eventos ao mesmo evento. Em alguns casos, você pode dissociar um manipulador de um evento. Para obter mais informações, consulte Eventos.

Subscrever um evento utilizando Handles e WithEvents

  1. Certifique-se de que o evento é declarado com uma declaração de evento.

  2. Declare uma variável de objeto no nível do módulo ou da classe, usando a WithEvents palavra-chave. A As cláusula para essa variável deve especificar a classe que gera o evento.

  3. Na declaração do procedimento de manipulação Sub de eventos, adicione uma Handles cláusula que especifique a WithEvents variável e o nome do evento.

  4. Quando o evento ocorre, o Visual Basic chama automaticamente o Sub procedimento. Seu código pode usar uma RaiseEvent instrução para gerar o evento e invocar todos os manipuladores inscritos.

    O exemplo a seguir define um evento e uma WithEvents variável que se refere à classe que gera o evento. O procedimento de manipulação de Sub eventos usa uma Handles cláusula para especificar a classe e o evento que ele manipula.

    ' 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
    

Inscrever-se em um evento usando AddHandler

  1. Certifique-se de que o evento é declarado com a instrução Event.

  2. Execute uma instrução AddHandler para conectar dinamicamente o procedimento de manipulação de Sub eventos com o evento.

  3. Quando o evento ocorre, o Visual Basic chama automaticamente o Sub procedimento. Seu código pode usar uma RaiseEvent instrução para gerar o evento e invocar todos os manipuladores inscritos.

    O exemplo a seguir usa a instrução AddHandler no construtor para associar o OnTimerElapsed procedimento como um manipulador de eventos para um evento de timer 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
    

    Você pode dissociar um manipulador de eventos de um evento executando a instrução RemoveHandler.

Ver também