Incuriosito da questa frase scritta da Lorenzo "Guru" Barbieri (chi è? mi pare di conoscerlo...), ho aperto il mio Visual Studio .NET 2003 per controllare di persona. In pratica, si parla della Property Window (PW) di Visual Studio. Se non sapete cos'è la PW, date un'occhiata alla barra Address o Indirizzo del vostro browser: cliccateci dentro, scrivete www.topolino.it e cliccate sul pulsante Go o Vai. Torniamo a noi, in pratica si dice che la PW non serve solamente ad elencare la proprietà di un controllo, ma anche ad elencare gli eventi che il controllo può gestire.
Andiamo con calma, perchè questa cosa non l'ho mai vista...apro VS2003, inizio un nuovo progetto Windows Application in C# ed ecco che mi appare un Windows Form sullo schermo. Richiamo la PW, clicco sul pulsante Events ed effettivamente ecco la lista degli eventi. Incredibile, non l'avevo mai vista!!!
Non solo: come succedeva con Access 2.0 (e via via con gli altri Access successivi), ad ogni evento posso associare la function che voglio, semplicemente "pescandola" dalla combobox nella PW.
Andiamo avanti. Faccio doppio-click sul form e per default mi viene creata la Form1_Load. Nella PW vedo effettivamente che all'evento Load è stata associata la function Form1_Load(). Mi chiedo chi popola le combobox della PW nella sezione Events, e soprattutto come. Apro il codice, e modifico/aggiungo fino ad avere quanto segue:
private void Form1_Load(object sender, System.EventArgs e)
{
// aggiungo questa linea
this.Text = "Form1_Load";
}
// scrivo questa routine
private void FormLoadScrittoaMano()
{
this.Text = "FormLoadScrittoaMano";
}
La prima, Form1_Load, è quella predefinita. La seconda, FormLoadScrittoaMano, l'ho scritta a mano. Che fatica mettere i ";" alla fine di ogni riga!! :-)
Vado nella PW e nella combobox la mia function non appare. Perchè? Penso subito che possa dipendere dalla firma: la Form1_Load originale ha due parametri: sender ed e, che nella mia FormLoadScrittoaMano() non ho. Li aggiungo velocemente alla mia, che così diventa:
private void FormLoadScrittoaMano(object sender, System.EventArgs e)
{
this.Text = "FormLoadScrittoaMano";
}
Adesso nella PW, sezione Events, riga Load, nella combobox appaiono correttamente due function: la Form1_Load() e la FormLoadScrittoaMano(). Ma la cosa interessante è questa: proviamo ad aggiungere queste righe di codice:
protected virtual void Pippo(object sender, PaintEventArgs e) { }
Questa è una semplice function Pippo. Proviamo ad aprire la PW, sezione Events, e apriamo la combobox relativa all'evento Paint: ecco che appare la nostra Pippo. Proviamo ad aprire le combobox degli altri eventi: la nostra function Pippo non compare. Perchè? Semplice: perchè la firma della nostra function fa capire all'IDE che si tratta di una function adatta a gestire l'evento Paint del Windows Form, ma inadatta per tutti gli altri eventi.
Quindi, morale: non solo PW gestisce proprietà ed eventi, ma in quest'ultimo caso aiuta lo sviluppatore con combobox intelligenti, sensibili al contesto, alla sintassi, alla firma delle function che lo sviluppatore scrive, impedendo di fatto che un qualsiasi evento venga gestito da una function "inadatta". Forte!
Visual Studio Property Window, voto 10!!!