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.

Vedi anche