Cenni preliminari sugli eventi (Windows Form)

Un evento è un'azione a cui si può rispondere o che può essere "gestita" nel codice. Gli eventi possono essere generati da un'azione utente, ad esempio un clic del mouse o la pressione di un tasto, oppure da codice programma o dal sistema.

Le applicazioni basate su eventi eseguono codice in risposta a un evento. Ogni form e ogni controllo espone un set predefinito di eventi per cui è possibile creare codice. Se si verifica uno di questi eventi e se il gestore eventi associato include codice, tale codice sarà richiamato.

Un oggetto può generare diversi tipi di eventi, ma molti tipi sono comuni alla maggior parte dei controlli. Ad esempio, la maggior parte degli oggetti gestirà un evento Click. Se un utente fa clic su un form, sarà eseguito il codice disponibile nel gestore eventi Click del codice.

Nota

Molti eventi si verificano insieme ad altri eventi. Ad esempio, quando si verifica l'evento DoubleClick, si verificano anche gli eventi MouseDown, MouseUp e Click.

Per informazioni su come generare e utilizzare un evento, vedere Eventi.

Delegati e rispettivo ruolo

I delegati sono classi comunemente usate in .NET Framework 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 funzioni, tuttavia, i delegati sono orientati ad oggetti, indipendenti dai tipi e sicuri. Mentre un puntatore a funzioni, inoltre, include solo un riferimento a una funzione specifica, un delegato è costituito da un riferimento a un oggetto e fa riferimento a uno o più metodi nell'oggetto.

Questo modello di evento usa delegati per associare gli eventi ai metodi usati per gestirli. Il delegato permette alle altre classi di effettuare la registrazione per la notifica di 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 Eventi.

I delegati possono essere associati a un singolo metodo o a più metodi (multicast). Quando si crea un delegato per un evento, in genere si crea un evento multicast . Una rara eccezione può essere costituita da un evento che ha come risultato una procedura specifica, ad esempio la visualizzazione di una finestra di dialogo, che non si ripeterebbe in modo logico più volte per un evento. Per informazioni su come creare un delegato multicast, vedere Come combinare delegati (delegati multicast).

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

Quando un evento è registrato dall'applicazione, il controllo genera l'evento richiamando il delegato corrispondente. Il delegato chiama a sua volta il metodo associato. Nel caso più comune, ovvero un delegato multicast, il delegato chiama a turno ogni metodo associato nell'elenco di chiamate, in modo da offrire una notifica di tipo uno-a-molti. In base a questa strategia, il controllo non deve mantenere un elenco di oggetti di destinazione per la notifica di eventi, poiché il delegato gestisce tutte le registrazioni e le notifiche.

I delegati permettono anche l'associazione di più eventi allo stesso metodo, offrendo una notifica di tipo molti-a-uno. Ad esempio, un evento di selezione di un pulsante e un evento di selezione di un comando di menu possono richiamare lo stesso delegato, che quindi chiama un singolo metodo per gestire questi eventi separati 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 corrisponda a quella del gestore eventi. Questa funzionalità consente di impostare o modificare il metodo associato in base a una condizione e di collegare in modo dinamico un gestore eventi a un controllo.

Vedi anche