Cenni preliminari sugli eventi (Windows Form)Events Overview (Windows Forms)

Un evento è un'azione a cui si può rispondere o che può essere "gestita" nel codice.An event is an action which you can respond to, or "handle," in code. 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.Events can be generated by a user action, such as clicking the mouse or pressing a key; by program code; or by the system.

Le applicazioni basate su eventi eseguono codice in risposta a un evento.Event-driven applications execute code in response to an event. Ogni form e ogni controllo espone un set predefinito di eventi per cui è possibile creare codice.Each form and control exposes a predefined set of events that you can program against. Se si verifica uno di questi eventi e se il gestore eventi associato include codice, tale codice sarà richiamato.If one of these events occurs and there is code in the associated event handler, that code is invoked.

Un oggetto può generare diversi tipi di eventi, ma molti tipi sono comuni alla maggior parte dei controlli.The types of events raised by an object vary, but many types are common to most controls. Ad esempio, la maggior parte degli oggetti gestirà un evento Click.For example, most objects will handle a Click event. Se un utente fa clic su un form, sarà eseguito il codice disponibile nel gestore eventi Click del codice.If a user clicks a form, code in the form's Click event handler is executed.

Nota

Molti eventi si verificano insieme ad altri eventi.Many events occur in conjunction with other events. Ad esempio, quando si verifica l'evento DoubleClick, si verificano anche gli eventi MouseDown, MouseUp e Click.For example, in the course of the DoubleClick event occurring, the MouseDown, MouseUp, and Click events occur.

Per informazioni su come generare e utilizzare un evento, vedere eventi.For information about how to raise and consume an event, see Events.

Delegati e rispettivo ruoloDelegates and Their Role

I delegati sono classi usate comunemente in .NET Framework.NET Framework per creare meccanismi di gestione degli eventi.Delegates are classes commonly used within the .NET Framework.NET Framework to build event-handling mechanisms. È possibile paragonare a grandi linee i delegati ai puntatori a funzioni, usati in genere in Visual C++Visual C++ e in altri linguaggi orientati ad oggetti.Delegates roughly equate to function pointers, commonly used in Visual C++Visual C++ and other object-oriented languages. A differenza dei puntatori a funzioni, tuttavia, i delegati sono orientati ad oggetti, indipendenti dai tipi e sicuri.Unlike function pointers however, delegates are object-oriented, type-safe, and secure. 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.In addition, where a function pointer contains only a reference to a particular function, a delegate consists of a reference to an object, and references to one or more methods within the object.

Usa questo modello di eventi delegati per associare gli eventi ai metodi che vengono usati per gestirli.This event model uses delegates to bind events to the methods that are used to handle them. Il delegato permette alle altre classi di effettuare la registrazione per la notifica di eventi specificando un metodo del gestore.The delegate enables other classes to register for event notification by specifying a handler method. Quando si verifica l'evento, il delegato chiama il metodo associato.When the event occurs, the delegate calls the bound method. Per ulteriori informazioni su come definire delegati, vedere eventi.For more information about how to define delegates, see Events.

I delegati possono essere associati a un singolo metodo o a più metodi (multicast).Delegates can be bound to a single method or to multiple methods, referred to as multicasting. Quando si crea un delegato per un evento, l'utente o Progettazione Windows Form creano in genere un evento multicast.When creating a delegate for an event, you (or the Windows Forms Designer) typically create a multicast event. 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.A rare exception might be an event that results in a specific procedure (such as displaying a dialog box) that would not logically repeat multiple times per event. Per informazioni su come creare un delegato multicast, vedere procedura: combinare delegati Multicast.For information about how to create a multicast delegate, see How to: Combine Delegates (Multicast Delegates).

Un delegato multicast mantiene un elenco di chiamate dei metodi a cui è associato.A multicast delegate maintains an invocation list of the methods it is bound to. Il delegato multicast supporta un metodo Combine per aggiungere un metodo all'elenco di chiamate e un metodo Remove per rimuoverlo.The multicast delegate supports a Combine method to add a method to the invocation list and a Remove method to remove it.

Quando un evento è registrato dall'applicazione, il controllo genera l'evento richiamando il delegato corrispondente.When an event is recorded by the application, the control raises the event by invoking the delegate for that event. Il delegato chiama a sua volta il metodo associato.The delegate in turn calls the bound method. 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 the most common case (a multicast delegate) the delegate calls each bound method in the invocation list in turn, which provides a one-to-many notification. 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.This strategy means that the control does not need to maintain a list of target objects for event notification—the delegate handles all registration and notification.

I delegati permettono anche l'associazione di più eventi allo stesso metodo, offrendo una notifica di tipo molti-a-uno.Delegates also enable multiple events to be bound to the same method, allowing a many-to-one notification. 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.For example, a button-click event and a menu-command–click event can both invoke the same delegate, which then calls a single method to handle these separate events the same way.

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.The binding mechanism used with delegates is dynamic: a delegate can be bound at run time to any method whose signature matches that of the event handler. 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.With this feature, you can set up or change the bound method depending on a condition and to dynamically attach an event handler to a control.

Vedere ancheSee Also

Creazione di gestori eventi in Windows FormCreating Event Handlers in Windows Forms
Informazioni generali sui gestori eventiEvent Handlers Overview