Nell'esempio seguente gli eventi vengono utilizzati per il conto alla rovescia 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(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
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 Multithreading in Visual Basic. |