Condividi tramite


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:

  • Public: può accedervi qualsiasi codice che sia in grado di accedere all'elemento che lo dichiara.

  • Protected: può accedervi solo il codice incluso nella relativa classe o in una classe derivata.

  • Friend: può accedervi solo il codice incluso nello stesso assembly.

  • Private: può accedervi solo il codice incluso nell'elemento che lo dichiara.

È 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

Parte

Descrizione

interface

Obbligatorio. Nome di un'interfaccia implementata dalla classe o dalla struttura che contiene la routine.

definedname

Obbligatorio. Nome mediante il quale la routine viene definita in interface. Non è necessario che questo nome corrisponda al nome utilizzato dalla routine per implementare la routine definita, ossia name.

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

Istruzione RaiseEvent

Istruzione Implements

Istruzione AddHandler

Istruzione RemoveHandler

Clausola Handles (Visual Basic)

Istruzione Delegate

Shared (Visual Basic)

Shadows (Visual Basic)

Altre risorse

Eventi (Visual Basic)