Gli eventi Gli eventi Ieri abbiamo concluso spiegando come usare un metodo dell'oggetto form per aprirlo, ma non abbiamo ancora visto come farlo in pratica. Vediamolo subito. Prima, però, dobbiamo creare il nuovo form da mostrare. Riaprite il progetto sui cui stavate lavorando ieri, poi scegliete Progetto > Aggiungi Window Form. Visualizzerete la finestra Aggiungi nuovo elemento (Figura 1). Figura 1 Questa finestra permette di aggiungere tanti tipi di elemento al progetto, ma per ora non preoccupatevene. Lasciate selezionato Windows Form e date un nome al nuovo form. Per ora Form2, che è il nome predefinito, va bene. Premete il pulsante Aggiungi. Visual Studio aggiunge il nuovo Form (Figura 1). Alessandra Salvaggio - Merlin Wizard DMC 2010 Tutti i diritti riservati 1
Figura 1 Notate che il nuovo form è presente anche nella finestra Esplora soluzioni che elenca gli elementi di un progetto. Ma, a parte questa osservazione, dopo aver creato il nuovo form dobbiamo decidere quando dobbiamo caricare il nuovo form. A dire la verità, la domanda giusta dovrebbe essere "al verificarsi di quale evento si deve aprire il nuovo form"? La parola chiave è evento. Nella programmazione orientata agli oggetti, si parla di eventi per indicare tutti quegli avvenimenti che possono "scatenare" l'esecuzione di un codice. In genere gli eventi sono causati da azioni dell'utente, come il clic su un pulsante, la selezione di un valore in una casella combinata, la selezione di una data da un calendario, ma non solo. Alcuni eventi sono indipendenti dalla azione dell'utente, come quelli generati da un timer. Avremo modo di tornare sui diversi eventi man mano che il nostro corso procede. In ogni caso adesso quale potrebbe essere l'evento al cui verificarsi viene eseguito il codice che carica Form2? Visto che abbiamo un pulsante il candidato ideale è il clic sul pulsante stesso. Ci sono diversi modi di scrivere il codice per un evento, ma per quello che è l'evento più comune per un oggetto, il sistema più semplice consiste nel fare doppio clic sull'oggetto stesso. Allora, usando le schede di Visual Studio (la Alessandra Salvaggio - Merlin Wizard DMC 2010 Tutti i diritti riservati 2
scheda che porta all'oggetto è Form1.vb [progettazione]), visualizzate Form1 e fate doppio clic su Button1. Verrete immediatamente portati alla scheda con il codice relativo a Form1 (Figura 2). Figura 2 è stato aggiunto del codice, si tratta di Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 1 System.EventArgs) Handles Button1.Click Le istruzioni Private Sub e sono istruzioni che costituiscono una Routine Sub. Una routine sub è appunto un blocco di codice che raggruppa diverse istruzioni. Quando si richiama una routine sub vengono eseguite tutte le istruzioni che essa contiene. La nostra routine conterrà una sola azione e sarà appunto quella di aprire il form Form2, ma potrebbe eseguirne diverse. Prima di aggiungere il codice che esegue questa operazione alla routine, è bene precisare che la parte che nel codice scritto automaticamente da Visual Studio dice che il codice della routine sarà eseguito al verificarsi dell'evento clic sull'oggetto Button1 è Handles Button1.Click 1 Il codice va a capo per motivi di spazio, ma bisogna scriverlo su una riga unica. Si deve andare a capo solo dopo Handles Button1.Click Alessandra Salvaggio - Merlin Wizard DMC 2010 Tutti i diritti riservati 3
Il nome della routine Button1_Click è stato scelto per semplicità, ma poteva essere qualunque altro (anche pippo, se volete fare una prova). Su questo, comunque, torneremo più avanti. Ora completiamo la routine sub aggiungendo, fra le sue istruzione di apertura e chiusura il codice che apre e mostra Form2 (Form2.Show(), come abbiamo anticipato alla fine della lezione di ieri). Notate che, mentre scrivete, Visual Studio, vi mostra vicino al testo che state inserendo una finestra con i suggerimenti del codice, ossia con parole che possono adattarsi al punto del codice in cui siete (Figura 3). Figura 3 Se volete inserire velocemente una delle voci suggerite, basta fare doppio clic su di essa. Il codice completo, comunque deve essere il seguente Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Form2.Show() Abbiamo finito. Possiamo provare il nostro progetto. Per avviare l'esecuzione di un progetto all'interno di Visual Studio, premete il tasto F5 sulla tastiera. Visualizzerete il primo form: premete sul pulsante per aprire il secondo. Per tornare alla modifica del codice basterà chiudere entrambi i form. Una routine sub che risponde a più eventi Alessandra Salvaggio - Merlin Wizard DMC 2010 Tutti i diritti riservati 4
Quando abbiamo descritto la routine che risponde ad un evento, abbiamo precisato che la porzione di codice che indica a quale evento risponde la nostra routine è Handles Button1.Click. Il fatto che Visual Studio un nome di routine che richiama il nome dell'evento a cui risponde la routine e una semplice scelta di comodità e in qualche modo una soluzione che ricorda il comportamento delle vecchie versioni di Visual Basic dove il nome della routine era significativo. Ora non lo è più e può essere scelto in modo arbitrario. Sarà poi la porzione di codice Handles a definire l'evento a cui deve rispondere la routine. Questa novità che sembra una semplice questione di nomi, in realtà ha una ricaduta molto molto interessante e significativa. Infatti, è possibile fare in modo che una stessa routine risponda ad eventi diversi in modo semplice. Basta elencare gli eventi a cui la routine deve rispondere nella porzione Handles del codice, separandoli con una virgola. Per evitare di complicare troppo le cose, noi faremo una prova aggiungendo sul Form1, un nuovo pulsante: anche questo pulsante permetterà di aprire Form2. Al di la di questo esempio così semplice, ci sono molte situazioni reali e più complesse in cui questa soluzione può risultare molto utile. Tornate a visualizzare Form1 e aggiungete un nuovo pulsante. Lasciate pure il nome predefinito Button2, portatevi nel foglio di codice legato a Form1 utilizzando le linguette della struttura e schede, senza fare doppio clic sul Button2. Modificate il codice già presente come segue (le modifiche sono evidenziate in giallo): Public Class Form1 Private Sub apriform2(byval sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click Form2.Show() End Class Notate che per maggiore chiarezza abbiamo anche cambiato nome alla routine che ora si chiama apriform2, un nome più descrittivo dell'operazione compiuta dalla routine e non dell'evento che la scatena. Alessandra Salvaggio - Merlin Wizard DMC 2010 Tutti i diritti riservati 5