Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Dichiara un evento definito dall'utente.
Sintassi
[ <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 |
Opzionale. Elenco di attributi che si applicano a questo evento. Più attributi sono separati da virgole. È necessario racchiudere l'elenco attributi tra parentesi angolari ("<" e ">"). |
accessmodifier |
Opzionale. Specifica il codice che può accedere all'evento. Può essere uno dei seguenti: - Pubblico: qualsiasi codice in grado di accedere all'elemento che lo dichiara può accedere. - Protetto: solo il codice all'interno della classe o una classe derivata può accedervi. - Friend: solo il codice nello stesso assembly può accedervi. - Privato: solo il codice nell'elemento che lo dichiara può accedere. - Codice friend protetto nella classe dell'evento, una classe derivata o lo stesso assembly può accedervi. - Il codice solo protetto privato nella classe dell'evento o in una classe derivata nello stesso assembly può accedervi. |
Shared |
Opzionale. Specifica che questo evento non è associato a un'istanza specifica di una classe o di una struttura. |
Shadows |
Opzionale. Indica che questo evento ripete e nasconde un elemento di programmazione con nome identico o un set di elementi di overload in una classe di base. È possibile nascondere qualsiasi tipo di elemento dichiarato con qualsiasi altro tipo. Un elemento ombreggiato non è disponibile dall'interno della classe derivata che lo ombreggiato, tranne da dove l'elemento shadowing non è accessibile. Ad esempio, se un Private elemento ombreggiato da un elemento della classe base, il codice che non dispone dell'autorizzazione per accedere all'elemento accede all'elemento Private della classe base. |
eventname |
Obbligatorio. Nome dell'evento; segue le convenzioni di denominazione delle variabili standard. |
parameterlist |
Opzionale. Elenco di variabili locali che rappresentano i parametri di questo evento. È necessario racchiudere l'elenco di parametri tra parentesi. |
Implements |
Opzionale. Indica che questo evento implementa un evento di un'interfaccia. |
implementslist |
Obbligatorio se Implements viene specificato. Elenco delle Sub procedure da implementare. Più procedure sono separate da virgole:implementedprocedure [ , implementedprocedure ... ] Ognuno implementedprocedure ha la sintassi e le parti seguenti:interface.definedname- interface -Obbligatorio. Nome di un'interfaccia che la routine contiene classe o struttura sta implementando.- Definedname -Obbligatorio. Nome in base al quale la routine è definita in interface. Non è necessario che sia uguale namea , il nome usato da questa routine per implementare la procedura definita. |
Custom |
Obbligatorio. Gli eventi dichiarati come Custom devono definire funzioni di accesso personalizzate AddHandler, RemoveHandlere RaiseEvent . |
delegatename |
Opzionale. Nome di un delegato che specifica la firma del gestore eventi. |
AddHandler |
Obbligatorio. Dichiara una AddHandler funzione di accesso, che specifica le istruzioni da eseguire quando viene aggiunto un gestore eventi, in modo esplicito tramite l'istruzione AddHandler o in modo implicito tramite la Handles clausola . |
End AddHandler |
Obbligatorio. Termina il AddHandler blocco. |
value |
Obbligatorio. Nome del parametro. |
RemoveHandler |
Obbligatorio. Dichiara una RemoveHandler funzione di accesso, che specifica le istruzioni da eseguire quando un gestore eventi viene rimosso tramite l'istruzione RemoveHandler . |
End RemoveHandler |
Obbligatorio. Termina il RemoveHandler blocco. |
RaiseEvent |
Obbligatorio. Dichiara una RaiseEvent funzione di accesso, che specifica le istruzioni da eseguire quando l'evento viene generato tramite l'istruzione RaiseEvent . In genere, viene richiamato un elenco di delegati gestiti dalle AddHandler funzioni di accesso e RemoveHandler . |
End RaiseEvent |
Obbligatorio. Termina il RaiseEvent blocco. |
delegatesignature |
Obbligatorio. Elenco di parametri che corrispondono ai parametri richiesti dal delegatename delegato. È necessario racchiudere l'elenco di parametri tra parentesi. |
statements |
Opzionale. Istruzioni che contengono i corpi dei AddHandlermetodi , RemoveHandlere RaiseEvent . |
End Event |
Obbligatorio. Termina il Event blocco. |
Osservazioni:
Dopo aver dichiarato l'evento, usare l'istruzione RaiseEvent per generare l'evento. Un evento tipico può essere dichiarato e generato come illustrato nei frammenti seguenti:
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
Annotazioni
È possibile dichiarare argomenti di evento esattamente come si fanno argomenti di routine, con le eccezioni seguenti: gli eventi non possono avere argomenti, ParamArray argomenti o Optional argomenti denominati. Gli eventi non hanno valori restituiti.
Per gestire un evento, è necessario associarlo a una subroutine del gestore eventi usando l'istruzione Handles o AddHandler . Le firme della subroutine e l'evento devono corrispondere. Per gestire un evento condiviso, è necessario usare l'istruzione AddHandler .
È possibile usare Event solo a livello di modulo. Ciò significa che il contesto di 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 altre informazioni, vedere Contesti di dichiarazione e livelli di accesso predefiniti.
Nella maggior parte dei casi, è possibile usare la prima sintassi nella sezione Sintassi di questo argomento per dichiarare gli eventi. Tuttavia, alcuni scenari richiedono un maggiore controllo sul comportamento dettagliato dell'evento. L'ultima sintassi nella sezione Sintassi di questo argomento, che usa la Custom parola chiave , fornisce tale controllo consentendo di definire eventi personalizzati. In un evento personalizzato si specifica esattamente ciò che si verifica quando il codice aggiunge o rimuove un gestore eventi da o verso l'evento oppure quando il codice genera l'evento. Per esempi, vedere Procedura: Dichiarare eventi personalizzati per risparmiare memoria e Procedura: Dichiarare eventi personalizzati per evitare il blocco.
Esempio
Nell'esempio seguente vengono usati eventi per contare i secondi da 10 a 0. Il codice illustra diversi metodi, proprietà e istruzioni correlati agli eventi. Include l'istruzione RaiseEvent .
La classe che genera un evento è l'origine evento e i metodi che elaborano l'evento sono i gestori eventi. Un'origine evento può avere più gestori per gli eventi generati. Quando la classe genera l'evento, tale evento viene generato in ogni classe che ha scelto di gestire gli eventi per tale istanza dell'oggetto.
Nell'esempio viene inoltre utilizzato un modulo (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. Quando è trascorso il tempo pieno (10 secondi), nella prima casella di testo viene visualizzato "Fine".
Il codice per Form1 specifica gli stati iniziali e del terminale del modulo. Contiene anche il codice eseguito quando vengono generati eventi.
Per usare questo esempio, aprire un nuovo progetto Windows Form. Aggiungere quindi un pulsante denominato Button1 e una casella di testo denominata TextBox1 al form principale, denominata Form1. Fare quindi clic con il pulsante destro del mouse sul modulo e scegliere Visualizza codice per aprire l'editor di codice.
Aggiungere una WithEvents variabile alla sezione dichiarazioni della Form1 classe :
Public Class TimerExample
Private WithEvents mTimer As TimerState
Aggiungere il codice seguente al codice per Form1. Sostituire tutte le procedure duplicate che possono esistere, ad esempio Form_Load o Button_Click.
Public Sub StartCountdownExample()
mTimer = New TimerState()
mTimer.StartCountdown(10.0, 1.0)
End Sub
Private Sub mTimer_UpdateTime(ByVal Countdown As Double) Handles mTimer.UpdateTime
Console.WriteLine("Time remaining: " & Format(Countdown, "##0.0") & " seconds")
End Sub
Private Sub mTimer_Finished() Handles mTimer.Finished
Console.WriteLine("Done")
End Sub
End Class
Public Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim SoFar As Double = 0
Do While SoFar < Duration
System.Threading.Thread.Sleep(CInt(Increment * 1000))
SoFar += Increment
RaiseEvent UpdateTime(Duration - SoFar)
Loop
RaiseEvent Finished()
End Sub
End Class
Premere F5 per eseguire l'esempio precedente e fare clic sul pulsante con etichetta Start. La prima casella di testo inizia a contare i secondi. Quando è trascorso il tempo pieno (10 secondi), nella prima casella di testo viene visualizzato "Fine".
Annotazioni
Il My.Application.DoEvents metodo non elabora gli eventi nello stesso modo in cui il form esegue. Per consentire al modulo di gestire direttamente gli eventi, è possibile usare il multithreading. Per altre informazioni, vedere Threading gestito.