Condividi tramite


Come sottoscrivere gli eventi e gestirli in Visual Basic

Un evento è un'azione o un'occorrenza , ad esempio un clic del mouse o un limite di credito superato, riconosciuto da alcuni componenti del programma e per il quale è possibile scrivere codice per rispondere. Un gestore eventi è il codice scritto per rispondere a un evento.

In Visual Basic sono disponibili due lati per lavorare con gli eventi:

  • Pubblicazione di eventi: le classi dichiarano gli eventi e le generano quando si verifica qualcosa di interessante usando l'istruzione RaiseEvent. Questo è ciò che effettivamente richiama (chiama) i gestori di eventi.
  • Sottoscrizione di eventi: si sottoscrive gli eventi identificando le procedure come gestori per eventi specifici. È possibile eseguire questa operazione con una Handles clausola e una WithEvents variabile o con un'istruzione AddHandler.

Un gestore eventi in Visual Basic è una Sub routine. Il tuo codice non lo richiama direttamente come fanno altre procedure Sub. Invece, gli editori di eventi invocano la routine quando l'evento viene generato, in quanto la routine è sottoscritta all'evento.

L'uso di una Handles clausola è il modo predefinito per sottoscrivere gli eventi in Visual Basic. Questo è il modo in cui i gestori eventi vengono scritti dai progettisti quando si programma nell'ambiente di sviluppo integrato (IDE). L'istruzione AddHandler è adatta per la sottoscrizione di eventi in modo dinamico in fase di esecuzione.

Quando si verifica l'evento, Visual Basic chiama automaticamente la routine del gestore eventi. Qualsiasi codice che ha accesso all'evento può farlo verificare eseguendo un'istruzione RaiseEvent.

È possibile associare più gestori eventi allo stesso evento. In alcuni casi è possibile dissociare un gestore da un evento. Per altre informazioni, vedere Events.

Sottoscrivere un evento usando Handles e WithEvents

  1. Assicurarsi che l'evento sia dichiarato con una dichiarazione di evento.

  2. Dichiarare una variabile oggetto a livello di modulo o classe usando la WithEvents parola chiave . La As clausola per questa variabile deve specificare la classe che genera l'evento.

  3. Nella dichiarazione della routine di gestione degli Sub eventi aggiungere una Handles clausola che specifica la WithEvents variabile e il nome dell'evento.

  4. Quando si verifica l'evento, Visual Basic chiama automaticamente la Sub routine. Il codice può usare un'istruzione RaiseEvent per generare l'evento e richiamare tutti i gestori sottoscritti.

    Nell'esempio seguente viene definito un evento e una WithEvents variabile che fa riferimento alla classe che genera l'evento. La routine di gestione degli Sub eventi usa una Handles clausola per specificare la classe e l'evento che gestisce.

    ' 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
    

Sottoscrivere un evento usando AddHandler

  1. Assicuratevi che l'evento sia dichiarato con un'istruzione di codice Event.

  2. Eseguire un'istruzione AddHandler per connettere dinamicamente la routine di gestione degli Sub eventi all'evento.

  3. Quando si verifica l'evento, Visual Basic chiama automaticamente la Sub routine. Il codice può usare un'istruzione RaiseEvent per generare l'evento e richiamare tutti i gestori sottoscritti.

    Nell'esempio seguente viene utilizzata l'istruzione AddHandler nel costruttore per associare la OnTimerElapsed routine come gestore eventi per un evento timer personalizzato.

    ' 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
    

    È possibile annullare l'dissociazione di un gestore eventi da un evento eseguendo l'istruzione RemoveHandler.

Vedere anche