Salve a tutti ragazzi. Oggi svilupperemo un esempio più complesso rispetto a quello trattato nella lezione precedente. Senza perdere altro tempo in chiacchiere passiamo subito alla pratica. Per prima cosa apriamo SharpDevelop e diamo vita ad una nuova soluzione, facendo clic sul pulsante che appare nella pagina iniziale; subito dopo aver aperto la finestra Nuovo progetto, facciamo click sulla voce C# nel riquadro sinistro ed evidenziamo il modello Applicazione Windows. Infine digitiamo un nome per la nostra futura applicazione e facciamo click su Crea.
Realizziamo un’interfaccia simile a quella riportata nell’immagine. In questo esempio prenderemo in considerazione diversi controlli, ossia CheckBox, GroupBox, TextBox, Button, ProgressBar, TrackBar, ListBox, Label. Di questi controlli toccheremo varie proprietà ed eventi, ovviamente molto elementari per il momento. Come potete notare la nostra finestra è divisa essenzialmente in quattro riquadri (GroupBox) contenenti al loro interno altri controlli. Andando per ordine, partiamo con l’analisi del primo GroupBox intitolato CheckBox, dato che tratteremo alcune proprietà delle CheckBox. Il nostro obiettivo è quello di disabilitare/abilitare, selezionare/deselezionare i tre controlli inseriti attraverso l’utilizzo dei quattro Buttons. Riportiamo ora, in ordine dall’alto verso il basso, il codice dei vari Button, tenendo presente che questo verrà eseguito durante l’evento Click dei Button. Ricordiamo che per inserire automaticamente il codice dell’evento click basta fare doppio click sul controllo button. Come richiamare invece altri eventi sarà spiegato poco dopo.
Button: Abilita tutti.
void Button4Click(object sender, EventArgs e)
{
checkBox1.Enabled = true;
checkBox2.Enabled = true;
checkBox3.Enabled = true;
//una volta abilitati tutti non c'è motivo per voler tenere ancora attivo il relativo pulsante
//ha senso invece abilitare il pulsante con la funzione inversa, perciò disabilitiamo il primo e attiviamo il secondo.
button4.Enabled = false;
button1.Enabled = true;
}
Button: Disabilita tutti.
void Button1Click(object sender, EventArgs e)
{
checkBox1.Enabled = false;
checkBox2.Enabled = false;
checkBox3.Enabled = false;
//una volta disabilitati tutti non c'è motivo per voler tenere ancora attivo il relativo pulsante
//ha senso invece abilitare il pulsante con la funzione inversa, perciò disabilitiamo il primo e attiviamo il secondo.
button4.Enabled = true;
button1.Enabled = false;
}
Button: Seleziona tutti.
void Button2Click(object sender, EventArgs e)
{
checkBox1.Checked = true;
checkBox2.Checked = true;
checkBox3.Checked = true;
//una volta selezionati tutti non c'è motivo per voler tenere ancora attivo il relativo pulsante
//ha senso invece abilitare il pulsante con la funzione inversa, perciò disabilitiamo il primo e attiviamo il secondo.
button2.Enabled = false;
button3.Enabled = true;
}
Button: Deseleziona tutti.
void Button3Click(object sender, EventArgs e)
{
checkBox1.Checked = false;
checkBox2.Checked = false;
checkBox3.Checked = false;
//una volta deselezionati tutti non c'è motivo per voler tenere ancora attivo il relativo pulsante
//ha senso invece abilitare il pulsante con la funzione inversa, perciò disabilitiamo il primo e attiviamo il secondo.
button3.Enabled = false;
button2.Enabled = true;
}
Passiamo ora al secondo riquadro, TextBox. Come potete osservare è già presente una breve descrizione nel GroupBox che spiega in parole spicciole sua la finalità. In questa parte tratteremo tre nuovi eventi: TextChanged, Enter, Leave. Il primo si verifica nel momento in cui il valore della proprietà Text cambia, in altre parole quando il contenuto della TextBox cambia; il secondo si verifica quando il controllo riceve lo stato attivo (Focus, per intenderci, quando fate click sullo stesso per scriverci dentro); l’ultimo si verifica quando il controllo perde lo stato attivo (per intenderci, quando lasciate la textbox per premere un pulsante, segnare una checkbox o per spostarvi in una textbox diversa).
Come attivare questi eventi: nel riquadro Proprietà (che potete visualizzare premendo F4) potete notare in alto un pulsante Eventi (rappresentato dall’icona del fulmine per capirci); cliccando su di esso potete visionare tutti gli eventi che possono scaturire dal controllo selezionato e, al tempo stesso, visualizzare quelli già attivati e utilizzati nel vostro codice sorgente, questi ultimi vengono indicati con del testo in grassetto.
Cominciamo dall’evento TextChanged. Perchè utilizzare questo evento? Avrete sicuramente notato che accanto alla TextBox è stato posizionato un pulsante (Pulisci) che ha come finalità quella di cancellare tutto il contenuto della TextBox (in termini tecnici cancellare il valore della proprietà Text). Non avrebbe senso avere un pulsante di questo genere attivo se la casella di testo è vuota. Proprio per questo dobbiamo abilitare o disabilitare il pulsante a seconda se il contenuto della TextBox è vuoto o meno, e per farlo bisogna verificare costantemente la modifica del contenuto. Ritornando al riquadro Eventi, facciamo doppio click sull’evento TextChanged, e verremo subito catapultati nella parte Codice. Ecco le istruzioni utili al nostro problema (occhio alle lettere maiuscole e minuscole).
void TextBox1TextChanged(object sender, EventArgs e)
{
if (textBox1.Text == "") {
button5.Enabled = false;
}
else if (textBox1.Text != "") {
button5.Enabled = true;
}
}
Passiamo agli altri due eventi, Enter e Leave. Il nostro obiettivo è scrivere un messaggio in una label nel momento in cui l’utente attiva e rilascia la textbox. Vediamo come fare. Ripetiamo la stessa operazione che abbiamo compiuto per richiamare l’evento TextChanged, facendo questa volta click sull’evento Enter e poi sull’evento Leave.
Ecco il codice:
void TextBox1Enter(object sender, EventArgs e)
{
label1.Text = "Ti sei posizionato sulla prima TextBox.";
}
void TextBox1Leave(object sender, EventArgs e)
{
label1.Text ="Hai rilasciato la prima TextBox.";
}
In ultimo ecco il codice del controllo button per cancellare il contenuto della textbox.
void Button5Click(object sender, EventArgs e)
{
textBox1.Text = "";
button5.Enabled=false;
}
Passiamo ora al controllo ListBox. In questo riquadro andremo ad aggiungere, modificare e rimuovere quelli che sono gli elementi che compongono la nostra lista. Per raggiungere il nostro obiettivo posizioniamo quattro controlli Button nel GroupBox con le rispettive etichette Aggiungi, Rimuovi, Pulisci, Ripristina.
Button: Aggiungi. In questo caso inseriremo nella nostra lista il testo contenuto all’interno della textbox.
void Button11Click(object sender, EventArgs e)
{
listBox1.Items.Add (textBox4.Text);
}
Button: Rimuovi. Si rimuove l’elemento selezionato nella lista.
void Button9Click(object sender, EventArgs e)
{
listBox1.Items.RemoveAt (listBox1.SelectedIndex);
}
Button. Pulisci. Cancella tutto il contenuto della lista.
void Button8Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
}
Button. Ripristina. Ripristina il contenuto originale della listbox.
void Button10Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.Add ("pippo");
listBox1.Items.Add ("pluto");
listBox1.Items.Add ("paperino");
listBox1.Items.Add ("topolino");
listBox1.Items.Add ("zio paperone");
listBox1.Items.Add ("gastone");
listBox1.Items.Add ("qui");
listBox1.Items.Add ("quo");
listBox1.Items.Add ("qua");
listBox1.Items.Add ("gaia");
listBox1.Items.Add ("get");
}
Nell’ultima parte tratteremo l’utilizzo della ProgressBar e della TrackBar. Il nostro obiettivo è quello di aggiornare in maniera istantanea il valore della ProgressBar attraverso la TrackBar, utilizzando l’evento Scroll. Quindi richiamiamo l’evento Scroll della TrackBar e inseriamo questo codice.
void TrackBar1Scroll(object sender, EventArgs e)
{
//il valore della progressbar viene espresso in centesimi, dunque è necessario fare una piccola conversione per avere il risultato desiderato.
progressBar1.Value=trackBar1.Value * 10;
}
Ecco qui terminata la seconda parte della nostra miniguida su C#. Spero di aver dato qualche piccolo aiuto a tutti coloro che si apprestano ad imparare questo potente linguaggio. Cliccate qui per scaricare questo esempio. Per visionare lo stesso esempio realizzato in MonoDevelop su Ubuntu fare il click su questo indirizzo. Alla prossima 😉