Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Sebbene sia possibile visualizzare un progetto di Visual Studio come una serie di procedure eseguite in una sequenza, in realtà la maggior parte dei programmi è guidata dagli eventi, il che significa che il flusso di esecuzione è determinato da occorrenze esterne chiamate eventi.
Un evento è un segnale che informa un'applicazione che si è verificato un evento importante. Ad esempio, quando un utente fa clic su un controllo in una maschera, la maschera può generare un Click
evento e chiamare una procedura che gestisce l'evento. Gli eventi consentono anche di comunicare attività separate. Si supponga, ad esempio, che l'applicazione esegua un'attività di ordinamento separatamente dall'applicazione principale. Se un utente annulla l'ordinamento, l'applicazione può inviare un evento di annullamento che indica all'utente di arrestare il processo di ordinamento.
Termini e concetti dell'evento
In questa sezione vengono descritti i termini e i concetti usati con gli eventi in Visual Basic.
Dichiarazione di eventi
Si dichiarano eventi all'interno di classi, strutture, moduli e interfacce usando la Event
parola chiave , come nell'esempio seguente:
Event AnEvent(ByVal EventNumber As Integer)
Generazione di eventi
Un evento è simile a un messaggio che annuncia che si è verificato un evento importante. L'azione di trasmissione del messaggio viene chiamata innalzamento dell'evento. In Visual Basic si generano eventi con l'istruzione RaiseEvent
, come nell'esempio seguente:
RaiseEvent AnEvent(EventNumber)
Gli eventi devono essere generati all'interno dell'ambito della classe, del modulo o della struttura in cui sono dichiarati. Ad esempio, una classe derivata non può generare eventi ereditati da una classe di base.
Generatori di eventi
Qualsiasi oggetto in grado di generare un evento è un mittente di eventi, noto anche come origine evento. Moduli, controlli e oggetti definiti dall'utente sono esempi di mittenti di eventi.
Gestori eventi
I gestori eventi sono procedure chiamate quando si verifica un evento corrispondente. È possibile usare qualsiasi subroutine valida con una firma corrispondente come gestore eventi. Non è tuttavia possibile usare una funzione come gestore eventi, perché non può restituire un valore all'origine evento.
Visual Basic usa una convenzione di denominazione standard per i gestori eventi che combina il nome del mittente dell'evento, un carattere di sottolineatura e il nome dell'evento. Ad esempio, l'evento Click
di un pulsante denominato button1
sarà denominato Sub button1_Click
.
Annotazioni
È consigliabile usare questa convenzione di denominazione quando si definiscono i gestori eventi per gli eventi personalizzati, ma non è obbligatorio; è possibile usare qualsiasi nome di subroutine valido.
Associazione di eventi con i gestori di eventi
Prima che un gestore eventi diventi utilizzabile, è necessario associarlo a un evento usando l'istruzione Handles
o AddHandler
.
WithEvents e la clausola Handles
L'istruzione WithEvents
e la clausola Handles
forniscono un modo dichiarativo per specificare i gestori di eventi. Un evento generato da un oggetto dichiarato con la WithEvents
parola chiave può essere gestito da qualsiasi routine con un'istruzione Handles
per tale evento, come illustrato nell'esempio seguente:
' Declare a WithEvents variable.
Dim WithEvents EClass As New EventClass
' Call the method that raises the object's events.
Sub TestEvents()
EClass.RaiseEvents()
End Sub
' Declare an event handler that handles multiple events.
Sub EClass_EventHandler() Handles EClass.XEvent, EClass.YEvent
MsgBox("Received Event.")
End Sub
Class EventClass
Public Event XEvent()
Public Event YEvent()
' RaiseEvents raises both events.
Sub RaiseEvents()
RaiseEvent XEvent()
RaiseEvent YEvent()
End Sub
End Class
L'istruzione WithEvents
e la Handles
clausola sono spesso la scelta migliore per i gestori eventi perché la sintassi dichiarativa usata rende la gestione degli eventi più semplice da scrivere, leggere ed eseguire il debug. Tuttavia, tenere presente le limitazioni seguenti sull'uso delle WithEvents
variabili:
Non è possibile usare una
WithEvents
variabile come variabile oggetto. Ciò significa che non è possibile dichiararlo comeObject
, è necessario specificare il nome della classe quando si dichiara la variabile.Poiché gli eventi condivisi non sono associati alle istanze di classe, non è possibile usare
WithEvents
per gestire in modo dichiarativo gli eventi condivisi. Analogamente, non è possibile usareWithEvents
oHandles
per gestire gli eventi da un oggettoStructure
. In entrambi i casi, è possibile usare l'istruzioneAddHandler
per gestire tali eventi.Non è possibile creare matrici di
WithEvents
variabili.
WithEvents
Le variabili consentono a un singolo gestore eventi di gestire uno o più tipi di evento o uno o più gestori eventi per gestire lo stesso tipo di evento.
Sebbene la Handles
clausola sia il modo standard di associare un evento a un gestore eventi, è limitato all'associazione di eventi ai gestori eventi in fase di compilazione.
In alcuni casi, ad esempio con gli eventi associati a maschere o controlli, Visual Basic genera automaticamente uno stub per un gestore eventi vuoto e lo associa all'evento. Ad esempio, quando si fa doppio clic su un pulsante di comando su un modulo in modalità progettazione, Visual Basic crea un gestore eventi vuoto e una variabile WithEvents
associata al pulsante di comando, come nel codice seguente:
Friend WithEvents Button1 As System.Windows.Forms.Button
Protected Sub Button1_Click() Handles Button1.Click
End Sub
AddHandler e RemoveHandler
L'istruzione AddHandler
è simile alla clausola Handles
in quanto entrambe consentono di specificare un gestore di eventi. Tuttavia, , AddHandler
usato con RemoveHandler
, offre maggiore flessibilità rispetto alla Handles
clausola , consentendo di aggiungere, rimuovere e modificare in modo dinamico il gestore eventi associato a un evento. Se si desidera gestire eventi o eventi condivisi da una struttura, è necessario usare AddHandler
.
AddHandler
accetta due argomenti: il nome di un evento da un emittente di eventi come un controllo, e un'espressione che valuta un delegato. Non è necessario specificare in modo esplicito la classe delegato quando si usa AddHandler
, perché l'istruzione AddressOf
restituisce sempre un riferimento al delegato. Nell'esempio seguente un gestore eventi viene associato a un evento generato da un oggetto :
AddHandler Obj.XEvent, AddressOf Me.XEventHandler
RemoveHandler
, che disconnette un evento da un gestore eventi, usa la stessa sintassi di AddHandler
. Per esempio:
RemoveHandler Obj.XEvent, AddressOf Me.XEventHandler
Nell'esempio seguente un gestore eventi è associato a un evento e l'evento viene generato. Il gestore eventi intercetta l'evento e visualizza un messaggio.
Il primo gestore eventi viene quindi rimosso e all'evento è associato un gestore eventi diverso. Quando l'evento viene generato di nuovo, viene visualizzato un messaggio diverso.
Infine, il secondo gestore eventi viene rimosso e l'evento viene generato per una terza volta. Poiché non esiste più un gestore eventi associato all'evento, non viene eseguita alcuna azione.
Module Module1
Sub Main()
Dim c1 As New Class1
' Associate an event handler with an event.
AddHandler c1.AnEvent, AddressOf EventHandler1
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler1
' Now associate a different event handler with the event.
AddHandler c1.AnEvent, AddressOf EventHandler2
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler2
' This event will not be handled.
c1.CauseTheEvent()
End Sub
Sub EventHandler1()
' Handle the event.
MsgBox("EventHandler1 caught event.")
End Sub
Sub EventHandler2()
' Handle the event.
MsgBox("EventHandler2 caught event.")
End Sub
Public Class Class1
' Declare an event.
Public Event AnEvent()
Sub CauseTheEvent()
' Raise an event.
RaiseEvent AnEvent()
End Sub
End Class
End Module
Gestione degli eventi ereditati da una classe base
Le classi derivate, classi che ereditano caratteristiche da una classe di base, possono gestire gli eventi generati dalla relativa classe di base usando l'istruzione Handles MyBase
.
Per gestire gli eventi da una classe di base
Dichiarare un gestore eventi nella classe derivata aggiungendo un'istruzione
Handles MyBase.
eventname alla riga di dichiarazione della routine del gestore eventi, dove eventname è il nome dell'evento nella classe base che si sta gestendo. Per esempio:Public Class BaseClass Public Event BaseEvent(ByVal i As Integer) ' Place methods and properties here. End Class Public Class DerivedClass Inherits BaseClass Sub EventHandler(ByVal x As Integer) Handles MyBase.BaseEvent ' Place code to handle events from BaseClass here. End Sub End Class
Sezioni correlate
Titolo | Descrizione |
---|---|
Procedura dettagliata: Dichiarazione e generazione di eventi | Fornisce una descrizione dettagliata di come dichiarare e generare eventi per una classe. |
Procedura dettagliata: Gestione degli eventi | Illustra come scrivere una routine del gestore eventi. |
Procedura: Dichiarare eventi personalizzati per evitare il blocco | Illustra come definire un evento personalizzato che consenta la chiamata asincrona dei gestori eventi. |
Procedura: Dichiarare eventi personalizzati per risparmiare memoria | Viene illustrato come definire un evento personalizzato che usa la memoria solo quando l'evento viene gestito. |
Risoluzione dei Problemi dei Gestori Eventi Ereditati in Visual Basic | Elenca i problemi comuni che si verificano con i gestori eventi nei componenti ereditati. |
Avvenimenti | Fornisce una panoramica del modello di eventi in .NET Framework. |
Creazione di gestori eventi in Windows Form | Viene descritto come utilizzare gli eventi associati agli oggetti Windows Form. |
Delegati | Fornisce una panoramica dei delegati in Visual Basic. |