Condividi tramite


Panoramica degli eventi

Un evento è un'azione a cui è possibile rispondere o "handle" nel codice. Gli eventi vengono in genere generati da un'azione dell'utente, ad esempio facendo clic sul mouse o premendo un tasto, ma possono anche essere generati dal codice del programma o dal sistema.

Le applicazioni guidate dagli eventi eseguono codice in risposta a un evento. Ogni modulo e controllo espone un set predefinito di eventi a cui è possibile rispondere. Se uno di questi eventi viene generato e esiste un gestore eventi associato, il gestore viene richiamato e viene eseguito il codice.

I tipi di eventi generati da un oggetto variano, ma molti tipi sono comuni alla maggior parte dei controlli. Ad esempio, la maggior parte degli oggetti ha un Click evento generato quando un utente fa clic su di esso.

Annotazioni

Molti eventi si verificano con altri eventi. Ad esempio, nel corso dell'evento DoubleClick che si verifica, si verificano gli eventi MouseDown, MouseUpe Click.

Per informazioni generali su come generare e utilizzare un evento, vedere Gestione e generazione di eventi in .NET.

Delegati e loro ruolo

I delegati sono classi comunemente usate all'interno di .NET per creare meccanismi di gestione degli eventi. I delegati equivalgono approssimativamente ai puntatori a funzione, comunemente usati in Visual C++ e in altri linguaggi orientati agli oggetti. A differenza dei puntatori a funzione, tuttavia, i delegati sono orientati agli oggetti, indipendenti dai tipi e sicuri. Inoltre, dove un puntatore a funzione contiene solo un riferimento a una funzione specifica, un delegato è costituito da un riferimento a un oggetto e fa riferimento a uno o più metodi all'interno dell'oggetto .

Questo modello di evento usa delegati per associare eventi ai metodi usati per gestirli. Il delegato consente ad altre classi di registrarsi per la notifica degli eventi specificando un metodo del gestore. Quando si verifica l'evento, il delegato chiama il metodo associato. Per altre informazioni su come definire i delegati, vedere Gestione e generazione di eventi.

I delegati possono essere associati a un singolo metodo o a più metodi; in questo caso si parla di multicast. Quando si crea un delegato per un evento, di solito si tratta di un evento multicast. Un'eccezione rara potrebbe essere un evento che comporta una procedura specifica ,ad esempio la visualizzazione di una finestra di dialogo, che non ripeterebbe logicamente più volte per evento. Per informazioni su come creare un delegato multicast, vedere Come combinare delegati (delegati multicast).

Un delegato multicast gestisce un elenco di invocazione dei metodi a cui è associato. Il delegato multicast supporta un metodo Combine per aggiungere un metodo all'elenco chiamate e un metodo Remove per rimuoverlo.

Quando un evento viene registrato dall'applicazione, il controllo genera l'evento richiamando il delegato per tale evento. Il delegato chiama a sua volta il metodo associato. Nel caso più comune (un delegato multicast), il delegato chiama ogni metodo associato a turno nell'elenco di chiamate, fornendo una notifica uno-a-molti. Questa strategia significa che il controllo non deve mantenere un elenco di oggetti di destinazione per la notifica degli eventi. Il delegato gestisce tutte le registrazioni e le notifiche.

I delegati consentono anche l'associazione di più eventi allo stesso metodo, consentendo una notifica molti-a-uno. Ad esempio, un evento di clic del pulsante e un evento di clic del comando del menu possono invocare lo stesso delegato, il quale a sua volta chiama un unico metodo per gestire questi eventi distinti nello stesso modo.

Il meccanismo di associazione usato con i delegati è dinamico: un delegato può essere associato in fase di esecuzione a qualsiasi metodo la cui firma corrisponde a quella del gestore eventi. Con questa funzionalità, è possibile configurare o modificare il metodo associato a seconda di una condizione e associare dinamicamente un gestore eventi a un controllo.

Eventi in Windows Form

Gli eventi in Windows Form vengono dichiarati con il delegato per i EventHandler<TEventArgs> metodi del gestore. Ogni gestore eventi fornisce due parametri che consentono di gestire correttamente l'evento. Nell'esempio seguente viene illustrato un gestore eventi per l'evento Button di un controllo Click.

Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

End Sub
private void button1_Click(object sender, System.EventArgs e)
{

}

Il primo parametro,sender, fornisce un riferimento all'oggetto che ha generato l'evento. Il secondo parametro, e, passa un oggetto specifico all'evento gestito. Facendo riferimento alle proprietà dell'oggetto (e, a volte, ai relativi metodi), è possibile ottenere informazioni come la posizione del cursore durante eventi del mouse o i dati trasferiti in eventi di trascinamento della selezione.

In genere ogni evento produce un gestore eventi con un tipo di oggetto evento diverso per il secondo parametro. Alcuni gestori eventi, ad esempio quelli per gli eventi MouseDown e MouseUp, hanno lo stesso tipo di oggetto per il secondo parametro. Per questi tipi di eventi, è possibile usare lo stesso gestore eventi per gestire entrambi gli eventi.

È anche possibile usare lo stesso gestore eventi per gestire lo stesso evento per controlli diversi. Ad esempio, se si dispone di un gruppo di RadioButton controlli in una maschera, è possibile creare un singolo gestore eventi per l'evento Click di ogni RadioButtonoggetto. Per altre informazioni, vedere Come gestire un evento di controllo.