.NET è una piattaforma di programmazione basata sui controlli ed i loro eventi. Le applicazione che ne fanno largo uso implementano dei metodi che descrivono le istruzioni da eseguire alla pressione (o al cambiamento di stato) dei controlli. Spesso è opportuno, quando ne si fa uso in grande numero, associare un solo metodo agli eventi dei controlli, riducendo la quantità di codice scritto.
Naturalmente è di importanza vitale rilevare qual'è il controllo che ha scatenato l'evento.
this.button1.Click += new System.EventHandler(this.genericButton_Click);
L'istruzione riportata sopra assegna il delegate this.genericButton_Click all'evento Click del pulsante button1. Nel caso in cui più di un controllo debba essere associato allo stesso metodo dobbiamo aggiungere tante istruzioni di assegnamento quanti sono i controlli.
/* CODE 1 */
private void InitializeComponent(){
this.button1.Click += new System.EventHandler(this.genericButton_Click);
this.button2.Click += new System.EventHandler(this.genericButton_Click);
this.button3.Click += new System.EventHandler(this.genericButton_Click);
this.buttonN.Click += new System.EventHandler(this.genericButton_Click);
}
Ora dobbiamo fare in modo che il metodo che gestisce l'evento sia in grado di riconoscere quale controllo l'ha chiamato.
Analizzando la seguente 'firma' del metodo a cui è assegnato l'evento:"
private void genericButton_Click(object sender, System.EventArgs e)
possiamo notare che vengono passati 2 parametri: sender ed e un istanza della classe EventArgs; sender è un oggetto generico, se provassimo ad interrogare le sue proprietà ci accorgeremmo che non è possibile accedere a nessuna delle proprietà tipiche di un controllo ma solo a quelle intrinseche della classe base object.
Per ottenere il controllo che ha scatenato l'evento dobbiamo effettuare un cast dell'oggetto verso il tipo di controllo che ci aspettiamo lo abbia scatenato.
/* CODE 2 */
private void genericButton_Click(object sender, System.EventArgs e){
Button Pulsante=(Button) sender;
}
A questo punto sia sender che Pulsante puntano alla medesima locazione di memoria e sarà quindi possibile leggere le proprietà dell'oggetto passato al metodo di gestione. Nel file allegato potete vedere il codice completo che permette di visualizzare in una TextBox il nome del pulsante che ha scatenato l'evento.