Istruzione RaiseEvent
Consente di attivare un evento dichiarato a livello di modulo in una classe, form o documento.
RaiseEvent eventname[( argumentlist )]
Parti
eventname
Obbligatoria. Nome dell'evento da attivare.argumentlist
Facoltativo. Elenco di variabili, matrici o espressioni delimitate da virgole. È necessario che l'argomento argumentlist sia racchiuso tra parentesi. Se non vi sono argomenti, omettere le parentesi.
Note
Il valore obbligatorio di eventname è il nome di un evento dichiarato nel modulo conforme alle convenzioni di denominazione delle variabili di Visual Basic.
Se l'evento non è stato dichiarato nel modulo nel quale viene generato si verificherà un errore. Nel frammento seguente vengono illustrate una dichiarazione di evento e una routine di generazione dell'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 utilizzare RaiseEvent per generare eventi non dichiarati in modo esplicito nel modulo. Se ad esempio tutti i form ereditano un evento Click da System.Windows.Forms.Form, non è possibile generare tale evento mediante RaiseEvent in un form derivato. Se si dichiara un evento Click nel modulo del form, esso nasconde l'evento Click del form. È ancora possibile richiamare l'evento Click del form chiamando il metodo OnClick.
Per impostazione predefinita, un evento definito in Visual Basic viene generato nel relativo gestore eventi nell'ordine di istituzione delle connessioni. Dato che gli eventi possono essere dotati di parametri ByRef, a un processo collegato in seguito possono essere passati parametri modificati da un precedente gestore eventi. Dopo l'esecuzione del gestore 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. Sebbene questi eventi non causino errori di runtime, è possibile che non vengano rilevati dai gestori eventi associati. Utilizzare il modificatore Shared per creare un evento condiviso se è necessario generare un evento da un costruttore.
Nota
Per modificare il comportamento predefinito degli eventi, specificare un evento personalizzato. Per eventi personalizzati, l'istruzione RaiseEvent consente di richiamare la funzione di accesso RaiseEvent dell'evento. Per ulteriori informazioni sugli eventi personalizzate, vedere Istruzione Event.
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 questo esempio, aprire un nuovo progetto di applicazione Windows, aggiungere un pulsante denominato Button1 e una casella di testo denominata TextBox1 al form principale con nome 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 procedure 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 con etichetta Start. 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
Per l'elaborazione degli eventi, il metodo My.Application.DoEvents si comporta in modo leggermente diverso rispetto al 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
Riferimenti
Clausola Handles (Visual Basic)