Condividi tramite


Procedura: chiamare un gestore eventi in Visual Basic

Un evento è un'operazione o un'occorrenza, come un clic del mouse o il superamento di un limite di credito, riconosciuta da un componente del programma e per la quale è possibile scrivere un codice di risposta. Un gestore eventi è il codice scritto in risposta a un evento.

Un gestore eventi in Visual Basic è una routine Sub. In genere, tuttavia, tale routine non viene chiamata in modo simile alle altre routine Sub ma viene piuttosto identificata come gestore per l'evento. A tale scopo è possibile utilizzare una clausola Clausola Handles (Visual Basic) e una variabile WithEvents (Visual Basic) oppure un'Istruzione AddHandler. L'utilizzo di una clausola Handles rappresenta la modalità predefinita per dichiarare un gestore eventi in Visual Basic. I gestori eventi vengono scritti in questo modo dagli addetti alla progettazione quando si programma nell'ambiente di sviluppo integrato (IDE). L'istruzione AddHandler consente di generare eventi in modo dinamico in fase di esecuzione.

Quando si verifica l'evento, la routine del gestore eventi viene chiamata automaticamente. Qualsiasi codice che disponga di accesso all'evento può causarne la generazione mediante l'esecuzione di un'Istruzione RaiseEvent.

È possibile associare più gestori eventi allo stesso evento. In alcuni casi è possibile dissociare un gestore da un evento. Per ulteriori informazioni, vedere Eventi (Visual Basic).

Per chiamare un gestore eventi mediante Handles e WithEvents

  1. Verificare che l'evento venga dichiarato mediante un'Istruzione Event.

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

  3. Nella dichiarazione della routine di gestione degli eventi Sub aggiungere una clausola Clausola Handles (Visual Basic) che specifichi la variabile WithEvents e il nome dell'evento.

  4. Quando si verifica l'evento, la routine Sub viene chiamata automaticamente. Nel codice è possibile specificare un'istruzione RaiseEvent per generare l'evento.

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

    Public Class raisesEvent
        Public Event somethingHappened()
        Dim WithEvents happenObj As New raisesEvent
        Public Sub processHappen() Handles happenObj.somethingHappened
            ' Insert code to handle somethingHappened event.
        End Sub
    End Class
    

Per chiamare un gestore eventi mediante AddHandler

  1. Verificare che l'evento venga dichiarato mediante un'istruzione Event.

  2. Eseguire un'Istruzione AddHandler per collegare in modo dinamico la routine di gestione degli eventi Sub all'evento stesso.

  3. Quando si verifica l'evento, la routine Sub viene chiamata automaticamente. Nel codice è possibile specificare un'istruzione RaiseEvent per generare l'evento.

    Nell'esempio seguente viene definita una routine Sub per la gestione dell'evento Closing di un form. Viene quindi utilizzata l'Istruzione AddHandler per associare la routine catchClose come gestore eventi per Closing.

    ' Place these procedures inside a Form class definition.
    Private Sub catchClose(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
        ' Insert code to deal with impending closure of this form.
    End Sub
    Public Sub formOpened()
        AddHandler Me.Closing, AddressOf catchClose
    End Sub
    

    È possibile dissociare un gestore eventi da un evento mediante l'esecuzione dell'Istruzione RemoveHandler.

Vedere anche

Attività

Procedura: creare una routine (Visual Basic)

Procedura: chiamare una routine che non restituisce un valore (Visual Basic)

Riferimenti

Istruzione Sub (Visual Basic)

Operatore AddressOf (Visual Basic)

Concetti

Routine in Visual Basic

Routine Sub (Visual Basic)