Compartilhar via


Como assinar eventos e tratá-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 é reconhecido por algum componente do programa e para o 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, existem dois aspectos a serem considerados ao trabalhar com eventos:

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

Um manipulador de eventos no Visual Basic é um procedimento Sub. Seu código não o chama diretamente como outros Sub procedimentos. Em vez disso, os editores de eventos invocam o procedimento quando o evento ocorre porque o procedimento está subscrito ao 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 IDE (ambiente de desenvolvimento integrado). A instrução AddHandler é adequada para inscrever-se em eventos dinamicamente em tempo de 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 desassociar um manipulador de um evento. Para obter mais informações, consulte Eventos.

Assinar um evento usando Handles e WithEvents

  1. Verifique se o evento foi declarado com uma Instruçã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 dessa variável deve especificar a classe que gera o evento.

  3. Na declaração do procedimento de tratamento Sub de eventos, adicione uma Handles cláusula que especifica 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 Sub de 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
    

Assinar um evento usando AddHandler

  1. Verifique se o evento foi declarado com uma instrução Event.

  2. Execute uma instrução AddHandler para conectar dinamicamente o procedimento de manipulação Sub de 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 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
    

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

Consulte também