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
Creare una classe semplice che contenga un evento.
Class Class1 Public Event AnEvent(ByVal EventNumber As Integer) End Class
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
Nell'editor di codice scegliere la variabile WithEvents appena dichiarata dalla casella di riepilogo a discesa Nome classe a sinistra.
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.
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
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
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
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
Delegati e operatore AddressOf