Condividi tramite


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

Istruzione Event

Istruzione AddHandler

Istruzione RemoveHandler

Clausola Handles (Visual Basic)

Altre risorse

Eventi (Visual Basic)