Istruzione Event
Consente di dichiarare un evento definito dall'utente.
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname[(parameterlist)] _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname As delegatename _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Custom Event eventname As delegatename _
[ Implements implementslist ]
[ <attrlist> ] AddHandler(ByVal value As delegatename)
[ statements ]
End AddHandler
[ <attrlist> ] RemoveHandler(ByVal value As delegatename)
[ statements ]
End RemoveHandler
[ <attrlist> ] RaiseEvent(delegatesignature)
[ statements ]
End RaiseEvent
End Event
Parti
Parte |
Descrizione |
||||||
attrlist |
Parametro facoltativo. Elenco di attributi applicabili all'evento. Gli attributi sono separati da una virgola. È necessario racchiudere l'Elenco degli attributi (Visual Basic) tra parentesi angolari ("<" e ">"). |
||||||
accessmodifier |
Parametro facoltativo. Consente di specificare il tipo di codice che può accedere all'evento. ad esempio uno dei seguenti:
È possibile specificare Protected Friend per consentire l'accesso dal codice incluso nella classe dell'evento, in una classe derivata o nello stesso assembly. |
||||||
Shared |
Parametro facoltativo. Consente di specificare che l'evento non è associato a un'istanza specifica di una classe o di una struttura. |
||||||
Shadows |
Parametro facoltativo. Consente di indicare che l'evento ridichiara e nasconde un elemento di programmazione omonimo o un insieme di elementi di overload di una classe base. È possibile nascondere qualsiasi tipo di elemento dichiarato con qualsiasi altro tipo. Un elemento nascosto non è disponibile all'interno della classe derivata che lo nasconde, a meno che l'elemento di shadowing sia inaccessibile. Se, ad esempio, un elemento Private nasconde un elemento della classe base, il codice che non dispone dell'autorizzazione per accedere all'elemento Private accede invece all'elemento della classe base. |
||||||
eventname |
Obbligatorio. Nome dell'evento, conforme alle convenzioni di denominazione standard delle variabili. |
||||||
parameterlist |
Parametro facoltativo. Elenco di variabili locali che rappresentano i parametri dell'evento. L'Elenco dei parametri (Visual Basic) deve essere racchiuso tra parentesi. |
||||||
Implements |
Parametro facoltativo. Indica che l'evento consente di implementare un evento di un'interfaccia. |
||||||
implementslist |
Obbligatoria se viene fornita Implements. Elenco di routine Sub implementate. Nel caso di più routine, è possibile separarle mediante virgole: proceduraimplementata [ , proceduraimplementata ... ] Ogni implementedprocedure presenta la sintassi e le parti seguenti: interface.definedname
|
||||||
Custom |
Obbligatorio. È necessario che gli eventi dichiarati come Custom definiscano funzioni di accesso AddHandler, RemoveHandler e RaiseEvent personalizzate. |
||||||
delegatename |
Parametro facoltativo. Nome del delegato che specifica la firma del gestore eventi. |
||||||
AddHandler |
Obbligatorio. Dichiara una funzione di accesso AddHandler che specifica le istruzioni da eseguire quanto viene aggiunto un gestore eventi, sia in modo esplicito mediante l'istruzione AddHandler che in modo implicito mediante la clausola Handles. |
||||||
End AddHandler |
Obbligatorio. Termina il blocco AddHandler. |
||||||
value |
Obbligatorio. Nome parametro. |
||||||
RemoveHandler |
Obbligatorio. Dichiara una funzione di accesso RemoveHandler che specifica le istruzioni da eseguire quando un gestore eventi viene rimosso mediante l'istruzione RemoveHandler. |
||||||
End RemoveHandler |
Obbligatorio. Termina il blocco RemoveHandler. |
||||||
RaiseEvent |
Obbligatorio. Dichiara una funzione di accesso RaiseEvent che specifica le istruzioni da eseguire quando viene generato un evento mediante l'istruzione RaiseEvent. In genere, viene richiamato un elenco di delegati gestito dalle funzioni di accesso AddHandler e RemoveHandler. |
||||||
End RaiseEvent |
Obbligatorio. Termina il blocco RaiseEvent. |
||||||
delegatesignature |
Obbligatorio. Elenco di parametri che corrisponde ai parametri richiesti dal delegato delegatename. L'Elenco dei parametri (Visual Basic) deve essere racchiuso tra parentesi. |
||||||
statements |
Parametro facoltativo. Istruzioni che includono i corpi dei metodi AddHandler, RemoveHandler e RaiseEvent. |
||||||
End Event |
Obbligatorio. Termina il blocco Event. |
Note
Dopo aver dichiarato l'evento, utilizzare l'istruzione RaiseEvent per generarlo. Nei frammenti seguenti viene proposto un esempio di dichiarazione e attivazione di un evento:
Public Class EventSource
' Declare an event.
Public Event LogonCompleted(ByVal UserName As String)
Sub CauseEvent()
' Raise an event on successful logon.
RaiseEvent LogonCompleted("AustinSteele")
End Sub
End Class
Nota
È possibile dichiarare argomenti per gli eventi analogamente a quanto avviene per gli argomenti di routine, tenendo però conto che non è possibile specificare per gli eventi argomenti denominati, argomenti ParamArray o argomenti Optional,né ottenere da essi valori di ritorno.
Per gestire un evento, è necessario associarlo a una subroutine del gestore eventi mediante l'istruzione Handles o AddHandler. Le firme della subroutine e dell'evento devono corrispondere. Per gestire un evento condiviso, è necessario utilizzare l'istruzione AddHandler.
È possibile utilizzare la parola chiave Event solo a livello di modulo. In altri termini, il contesto della dichiarazione per un evento deve essere una classe, una struttura, un modulo o un'interfaccia e non può essere un file di origine, uno spazio dei nomi, una routine o un blocco. Per ulteriori informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefiniti (Visual Basic).
Nella maggior parte dei casi, per dichiarare un evento è possibile utilizzare la prima sintassi nella sezione relativa alla sintassi di questo argomento. In alcune circostanze è tuttavia necessario disporre di un controllo maggiore sui dettagli del comportamento dell'evento. L'ultima sintassi nella sezione relativa alla sintassi di questo argomento, che utilizza la parola chiave Custom, offre questa possibilità consentendo la definizione di eventi personalizzati. In un evento personalizzato, si specifica esattamente ciò che accade quando il codice aggiunge o rimuove un gestore eventi a o dall'evento o quando il codice genera l'evento. Per i relativi esempi, vedere Procedura: dichiarare eventi personalizzati per proteggere la memoria (Visual Basic) e Procedura: dichiarare eventi personalizzati per evitare il blocco (Visual Basic).
Esempio
Nell'esempio seguente vengono utilizzati eventi per il conteggio dei secondi da 10 a 0. Nel codice sono riportati numerosi metodi, proprietà e istruzioni correlati agli eventi. inclusa l'istruzione RaiseEvent.
La classe che genera l'evento viene definita origine e i metodi che lo elaborano vengono definiti gestori eventi. Un'origine eventi può disporre di più gestori per gli eventi generati. La generazione di un evento da parte di una classe si verifica anche in tutte le classi per le quali è stato scelto di gestire eventi per tale istanza dell'oggetto.
Nell'esempio vengono inoltre utilizzati un form (Form1) con un pulsante (Button1) e una casella di testo (TextBox1). Quando si fa clic sul pulsante, nella prima casella di testo viene visualizzato un conto alla rovescia da 10 a 0 secondi. Allo scadere dei 10 secondi nella prima casella di testo viene visualizzato "Completato".
Nel codice di Form1 sono specificati gli stati di inizio e fine del form, nonché il codice eseguito quando vengono generati gli eventi.
Per utilizzare l'esempio, aprire un nuovo progetto Windows Forms. Aggiungere quindi un pulsante denominato Button1 e una casella di testo denominata TextBox1 al form principale, denominato Form1. Fare quindi clic con il pulsante destro del mouse sul form e scegliere Visualizza codice per aprire l'editor del codice.
Aggiungere una variabile WithEvents alla sezione delle dichiarazioni della classe Form1:
Private WithEvents mText As TimerState
Aggiungere il codice seguente al codice per Form1. Sostituire eventuali routine duplicate, ad esempio Form_Load o Button_Click.
Private Sub Form1_Load() Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click() Handles Button1.Click
mText.StartCountdown(10.0, 0.1)
End Sub
Private Sub mText_ChangeText() Handles mText.Finished
TextBox1.Text = "Done"
End Sub
Private Sub mText_UpdateTime(ByVal Countdown As Double
) Handles mText.UpdateTime
TextBox1.Text = Format(Countdown, "##0.0")
' Use DoEvents to allow the display to refresh.
My.Application.DoEvents()
End Sub
Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim Start As Double = DateAndTime.Timer
Dim ElapsedTime As Double = 0
Dim SoFar As Double = 0
Do While ElapsedTime < Duration
If ElapsedTime > SoFar + Increment Then
SoFar += Increment
RaiseEvent UpdateTime(Duration - SoFar)
End If
ElapsedTime = DateAndTime.Timer - Start
Loop
RaiseEvent Finished()
End Sub
End Class
Premere F5 per eseguire l'esempio precedente, quindi fare clic sul pulsante Avvia. Verrà avviato il conto alla rovescia dei secondi nella prima casella di testo. Allo scadere dei 10 secondi nella prima casella di testo viene visualizzato "Completato".
Nota
Il metodo My.Application.DoEvents non consente di elaborare gli eventi allo stesso modo del form.Per consentire al form di gestire gli eventi direttamente, è possibile ricorrere al multithreading.Per ulteriori informazioni, vedere Threading (C# e Visual Basic).
Vedere anche
Attività
Procedura: dichiarare eventi personalizzati per proteggere la memoria (Visual Basic)
Procedura: dichiarare eventi personalizzati per evitare il blocco (Visual Basic)
Riferimenti
Clausola Handles (Visual Basic)