Condividi tramite


Procedura: scrivere gestori eventi

Aggiornamento: novembre 2007

La modalità di creazione di un gestore di eventi dipende da come lo si desidera associare all'evento. La modalità standard di creazione di un gestore di eventi prevede l'utilizzo della parola chiave Handles con la parola chiave WithEvents. Visual Basic fornisce una seconda modalità di gestione degli eventi: l'istruzione AddHandler. Le istruzioni AddHandler e RemoveHandler consentono l'avvio e l'arresto dinamico della gestione degli eventi per un evento specifico. È possibile utilizzare uno qualsiasi di questi due approcci, mentre non è consentito l'utilizzo di WithEvents e AddHandler per uno stesso evento.

Gestione di eventi con WithEvents

La parola chiave WithEvents consente di creare variabili oggetto di classe o di modulo che possono essere utilizzate con la clausola Handles nei gestori di eventi.

Per gestire gli eventi utilizzando WithEvents e la clausola Handles

  1. Creare una classe semplice che contenga un evento.

    Class Class1
        Public Event AnEvent(ByVal EventNumber As Integer)
    End Class
    
  2. Nella classe o nel modulo che gestirà l'evento, utilizzare la parola chiave WithEvents per dichiarare una variabile oggetto per l'origine degli eventi, come nell'esempio seguente:

    Public WithEvents ClassInst As Class1
    
  3. Nell'editor di codice scegliere la variabile WithEvents appena dichiarata dalla casella di riepilogo a discesa Nome classe a sinistra.

  4. Dalla casella di riepilogo a discesa Nome metodo a destra scegliere l'evento da gestire. Verrà creata una routine vuota per la gestione di eventi con una clausola Handles.

    Nota:

    Questo passaggio è facoltativo. È possibile creare manualmente una routine per la gestione di eventi a condizione che la routine creata sia una subroutine, che contenga l'elenco di argomenti corretto per l'evento da gestire e che contenga una clausola Handles che specifica l'evento da gestire.

  5. Aggiungere il codice di gestione evento alla routine per la gestione degli eventi utilizzando gli argomenti forniti. Nel codice che segue ne viene illustrato un esempio.

    Public Sub ClassInst_AnEvent(ByVal EventNumber As Integer) _
          Handles ClassInst.AnEvent
        MsgBox("Received event number: " & CStr(EventNumber))
    End Sub
    

Gestione di eventi con AddHandler

L'istruzione AddHandler consente di collegare dinamicamente le routine per la gestione degli eventi agli eventi stessi.

Per gestire gli eventi utilizzando AddHandler

  1. Creare una subroutine per gestire l'evento, come illustrato nell'esempio che segue.

    Public Sub EHandler(ByVal EventNumber As Integer)
        MsgBox("Received event number " & CStr(EventNumber))
    End Sub
    
  2. Dichiarare una variabile oggetto di classe corrispondente a quella dell'origine degli eventi da gestire. A differenza di quanto accade con la variabile WithEvents, è possibile utilizzare una variabile locale in una routine. Di seguito è riportato un esempio:

    Public Sub TestAddHandler()
        Dim CI As New Class1
    End Sub
    
  3. Utilizzare l'istruzione AddHandler per specificare il nome dell'origine eventi e l'istruzione AddressOf per indicare il nome del gestore di eventi. Ad esempio, aggiungere il codice che segue al termine della subroutine TestAddHandler:

    AddHandler CI.AnEvent, AddressOf EHandler
    

    È possibile utilizzare qualsiasi routine come gestore di eventi, purché supporti gli argomenti corretti per l'evento da gestire.

Utilizzo di RemoveHandler per interrompere la gestione di eventi

L'istruzione RemoveHandler consente di scollegare dinamicamente le routine per la gestione di eventi dagli eventi stessi.

Per interrompere la gestione di eventi mediante RemoveHandler

  • Utilizzare l'istruzione RemoveHandler per specificare il nome dell'origine eventi e l'istruzione AddressOf per indicare il nome del gestore eventi. La sintassi per le istruzioni RemoveHandler corrisponderà sempre all'istruzione AddHandler utilizzata per avviare la gestione eventi. Di seguito è riportato un esempio:

    RemoveHandler CI.AnEvent, AddressOf EHandler
    

Gestione di eventi ereditati da una classe base

Le classi derivate, ossia le classi che ereditano le caratteristiche da una classe base, sono in grado di gestire gli eventi generati dalla classe base utilizzando l'istruzione HandlesMyBase.

Per gestire gli eventi ereditati da una classe base

  • Dichiarare un gestore eventi nella classe derivata aggiungendo un'istruzione Handles MyBase.eventname alla riga della dichiarazione della routine per la gestione di eventi, in cui eventname corrisponde al nome dell'evento nella classe base che viene gestita. Di seguito è riportato un esempio:

    Public Class BaseClass
        Public Event BaseEvent(ByVal i As Integer)
        ' Place methods and properties here.
    End Class
    
    Public Class DerivedClass
        Inherits BaseClass
        Sub EventHandler(ByVal x As Integer) Handles MyBase.BaseEvent
            ' Place code to handle events from BaseClass here.
        End Sub
    End Class
    

Vedere anche

Concetti

Eventi e gestori eventi

Delegati e operatore AddressOf

AddHandler e RemoveHandler

Riferimenti

Handles

Istruzione AddHandler