Istruzione RaiseEvent
Attiva un evento dichiarato a livello di modulo all'interno di una classe, di una maschera o di un documento.
Sintassi
RaiseEvent eventname[( argumentlist )]
Parti
eventname
Obbligatorio. Nome dell'evento da attivare.
argumentlist
Facoltativo. Elenco delimitato da virgole di variabili, matrici o espressioni. L'argomento argumentlist
deve essere racchiuso tra parentesi. Se non sono presenti argomenti, le parentesi devono essere omesse.
Osservazioni:
Il eventname
richiesto è il nome di un evento dichiarato all'interno del modulo. Segue le convenzioni di denominazione delle variabili di Visual Basic.
Se l'evento non è stato dichiarato all'interno del modulo in cui viene generato, si verifica un errore. Il frammento di codice seguente illustra una dichiarazione di evento e una routine in cui viene generato l'evento.
' Declare an event at module level.
Event LogonCompleted(ByVal UserName As String)
Sub Logon(ByVal UserName As String)
' Raise the event.
RaiseEvent LogonCompleted(UserName)
End Sub
Non è possibile usare RaiseEvent
per generare eventi non dichiarati in modo esplicito nel modulo. Ad esempio, tutti i moduli ereditano un evento Click da System.Windows.Forms.Form, non possono essere generati usando RaiseEvent
in un form derivato. Se si dichiara un evento Click
nel modulo del form, esso oscura lo stesso evento Click del form. È comunque possibile richiamare l'evento Click del form chiamando il metodo OnClick.
Per impostazione predefinita, un evento definito in Visual Basic genera i gestori eventi nell'ordine in cui vengono stabilite le connessioni. Poiché gli eventi possono avere parametri ByRef
, un processo che si connette in ritardo può ricevere parametri modificati da un gestore eventi precedente. Dopo l'esecuzione dei gestori eventi, il controllo viene restituito alla subroutine che ha generato l'evento.
Nota
Gli eventi non condivisi non devono essere generati all'interno del costruttore della classe in cui sono dichiarati. Anche se tali eventi non causano errori di runtime, potrebbero non riuscire a essere rilevati dai gestori eventi associati. Usare il modificatore Shared
per creare un evento condiviso se è necessario generare un evento da un costruttore.
Nota
È possibile modificare il comportamento predefinito degli eventi definendo un evento personalizzato. Per gli eventi personalizzati, l'istruzione RaiseEvent
richiama la funzione di accesso RaiseEvent
dell'evento. Per altre informazioni sugli eventi personalizzati, vedere Istruzione Event.
Esempio 1
Negli esempi seguenti, gli eventi vengono usati per il conto alla rovescia dei secondi, da 10 a 0. Il codice illustra diversi metodi, proprietà e istruzioni correlati agli eventi, tra cui l'istruzione RaiseEvent
.
La classe che genera un 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. Quando la classe genera l'evento, lo stesso evento viene generato in tutte le classi per cui è stato scelto di gestire eventi per tale istanza dell'oggetto.
Nell'esempio vengono usati anche 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 il conto alla rovescia dei secondi da 10 a 0. Al termine dei 10 secondi, nella prima casella di testo viene visualizzato "Done".
Il codice di Form1
specifica gli stati di inizio e fine del form. Contiene inoltre il codice eseguito quando vengono generati gli eventi.
Per usare questo esempio, aprire un nuovo progetto applicazione Windows, aggiungere un pulsante denominato Button1
e una casella di testo denominata TextBox1
al modulo principale, denominato Form1
. Quindi, fare quindi clic con il pulsante destro del mouse sul form e scegliere Visualizza codice per aprire l'editor di codice.
Aggiungere una variabile WithEvents
alla sezione delle dichiarazioni della classe Form1
.
Private WithEvents mText As TimerState
Esempio 2
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 e fare clic sul pulsante con l'etichetta Start. Nella prima casella di testo viene avviato il conto alla rovescia dei secondi. Al termine dei 10 secondi, nella prima casella di testo viene visualizzato "Done".
Nota
Il metodo My.Application.DoEvents
non elabora gli eventi esattamente allo stesso modo del form. Per consentire al form di gestire direttamente gli eventi, si può ricorrere al multithreading. Per altre informazioni, vedere Threading gestito.