Impara a gestire liste, scelte e menu a tendina in Windows Forms.
Cosa sono ListBox e ComboBox
ListBox: Γ una scatola che mostra una lista di elementi. Puoi sceglierne uno o piΓΉ. ComboBox: Γ come un menu a tendina - clicchi la freccia e scegli un'opzione dalla lista.
π― Concetti Base
ListBox
Mostra tutti gli elementi, puoi sceglierne piΓΉ di uno
ComboBox
Occupa poco spazio, mostra solo l'elemento selezionato
Items
La lista degli elementi dentro questi controlli
SelectedItem
L'elemento che hai scelto
Spiegazione degli Array (Liste Fisse)
Un array Γ¨ come una scatola con tanti scomparti fissi
// Crea array con 3 scomparti vuoti
string[] frutti = new string[3];
// Riempi gli scomparti
frutti[0] = "Mela"; // primo scomparto
frutti[1] = "Banana"; // secondo scomparto
frutti[2] = "Arancia"; // terzo scomparto
// Oppure crealo giΓ pieno
string[] colori = { "Rosso", "Verde", "Blu" };
Spiegazione delle List (Liste che Crescono)
Una List Γ¨ come uno scaffale elastico che cresce
// Crea lista vuota
List<string> nomi = new List<string>();
// Aggiungi elementi
nomi.Add("Mario"); // aggiungi un elemento
nomi.Add("Luigi"); // aggiungi un altro
// Rimuovi elementi
nomi.Remove("Mario"); // togli un elemento
// La List cresce automaticamente!
Esercizio 1: Lista della Spesa Semplice
Obiettivo
Creare una lista dove aggiungere prodotti da comprare. Imparerai i concetti base di ListBox, TextBox e Button in un'applicazione pratica e utile.

Clicca per ingrandire l'immagine
- Interfaccia Semplice
| Tipo Controllo | Name | Funzione |
|---|---|---|
| TextBox | txtProdotto |
Per scrivere il prodotto |
| Button | btnAggiungi |
Per aggiungere alla lista |
| ListBox | lstSpesa |
Per vedere tutti i prodotti |
| Button | btnRimuovi |
Per togliere il prodotto selezionato |
- Codice Spiegato Passo Passo
FormSpesa.cs - Gestione Lista della Spesa
using System;
using System.Windows.Forms;
namespace ListaSpesa
{
public partial class FormSpesa : Form
{
public FormSpesa()
{
InitializeComponent();
}
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// EVENTO: Click del pulsante "Aggiungi"
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
private void btnAggiungi_Click(object sender, EventArgs e)
{
// βββββββββββββββββββββββββββββββββββββββββββββββββ
// STEP 1: Controlla se la TextBox Γ¨ vuota
// βββββββββββββββββββββββββββββββββββββββββββββββββ
if (txtProdotto.Text == "")
{
MessageBox.Show("Scrivi un prodotto!");
return; // Ferma il metodo qui
}
// βββββββββββββββββββββββββββββββββββββββββββββββββ
// STEP 2: Aggiunge il testo alla ListBox
// βββββββββββββββββββββββββββββββββββββββββββββββββ
lstSpesa.Items.Add(txtProdotto.Text);
// βββββββββββββββββββββββββββββββββββββββββββββββββ
// STEP 3: Svuota la TextBox dopo aver aggiunto
// βββββββββββββββββββββββββββββββββββββββββββββββββ
txtProdotto.Text = "";
// βββββββββββββββββββββββββββββββββββββββββββββββββ
// STEP 4: Mette il cursore nella TextBox
// βββββββββββββββββββββββββββββββββββββββββββββββββ
txtProdotto.Focus();
}
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// EVENTO: Click del pulsante "Rimuovi"
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
private void btnRimuovi_Click(object sender, EventArgs e)
{
// βββββββββββββββββββββββββββββββββββββββββββββββββ
// STEP 1: Controlla se Γ¨ stato selezionato qualcosa
// βββββββββββββββββββββββββββββββββββββββββββββββββ
if (lstSpesa.SelectedIndex == -1)
{
MessageBox.Show("Seleziona un prodotto da rimuovere!");
return;
}
// βββββββββββββββββββββββββββββββββββββββββββββββββ
// STEP 2: Rimuove l'elemento selezionato
// βββββββββββββββββββββββββββββββββββββββββββββββββ
lstSpesa.Items.RemoveAt(lstSpesa.SelectedIndex);
}
}
}
Metodi Usati - Spiegazione
Items.Add()
Aggiunge un elemento alla ListBox o ComboBox.
// Sintassi:
controllo.Items.Add(elemento);
// Esempi:
lstSpesa.Items.Add("Mele");
lstSpesa.Items.Add("Pane");
lstSpesa.Items.Add("Latte");
// In pratica:
string prodotto = txtProdotto.Text;
lstSpesa.Items.Add(prodotto);
SelectedIndex
Indica quale elemento Γ¨ selezionato. Il valore -1 significa "nessuno selezionato".
// Sintassi:
int posizione = controllo.SelectedIndex;
// Valori possibili:
// -1 β Nessun elemento selezionato
// 0 β Primo elemento selezionato
// 1 β Secondo elemento selezionato
// n β Elemento in posizione n selezionato
// Uso pratico:
if (lstSpesa.SelectedIndex == -1)
{
// Nessun elemento selezionato
MessageBox.Show("Seleziona un elemento!");
}
Items.RemoveAt()
Rimuove l'elemento alla posizione specificata.
// Sintassi:
controllo.Items.RemoveAt(indice);
// Esempi:
lstSpesa.Items.RemoveAt(0); // Rimuove il primo elemento
lstSpesa.Items.RemoveAt(2); // Rimuove il terzo elemento
// Uso con SelectedIndex:
int posizione = lstSpesa.SelectedIndex;
if (posizione != -1)
{
lstSpesa.Items.RemoveAt(posizione);
}
Esercizio 2: Scelta Colori con ComboBox
Obiettivo
Scegliere un colore da un menu a tendina e cambiare il colore di sfondo del form.
Introduce l'uso della ComboBox e l'istruzione switch per gestire scelte multiple.

Clicca per ingrandire l'immagine
- Interfaccia
| Tipo Controllo | Name | Funzione |
|---|---|---|
| ComboBox | cmbColori |
Per scegliere il colore |
| Button | btnCambia |
Per applicare il colore |
Nota: Il form cambia colore di sfondo in base alla selezione
- Codice Completo
FormColori.cs - Gestione Colori
using System;
using System.Drawing;
using System.Windows.Forms;
namespace SceltaColori
{
public partial class FormColori : Form
{
public FormColori()
{
InitializeComponent();
InizializzaColori(); // Chiama il metodo all'avvio
}
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// METODO: Inizializza la ComboBox con i colori
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
private void InizializzaColori()
{
// Aggiunge diversi colori alla ComboBox
cmbColori.Items.Add("Rosso");
cmbColori.Items.Add("Verde");
cmbColori.Items.Add("Blu");
cmbColori.Items.Add("Giallo");
cmbColori.Items.Add("Arancia");
// Seleziona il primo elemento della lista
cmbColori.SelectedIndex = 0;
}
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// EVENTO: Click del pulsante "Cambia Colore"
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
private void btnCambia_Click(object sender, EventArgs e)
{
// Prende il colore selezionato dalla ComboBox
string coloreScelto = cmbColori.SelectedItem.ToString();
// Cambia il colore di sfondo in base alla scelta
switch (coloreScelto)
{
case "Rosso":
this.BackColor = Color.Red;
break;
case "Verde":
this.BackColor = Color.Green;
break;
case "Blu":
this.BackColor = Color.Blue;
break;
case "Giallo":
this.BackColor = Color.Yellow;
break;
case "Arancia":
this.BackColor = Color.Orange;
break;
}
}
}
}
Spiegazione dello Switch
Istruzione Switch
Γ come un "se...allora" ma per molti casi. Controlla il valore di una variabile e esegue codice diverso per ogni caso.
// Sintassi base:
switch (variabile)
{
case "valore1":
// Codice da eseguire se variabile == "valore1"
break;
case "valore2":
// Codice da eseguire se variabile == "valore2"
break;
default:
// Codice da eseguire se nessun case corrisponde
break;
}
// Esempio pratico:
string giorno = "Lunedì";
switch (giorno)
{
case "Lunedì":
MessageBox.Show("Inizio settimana!");
break;
case "Venerdì":
MessageBox.Show("Fine settimana!");
break;
default:
MessageBox.Show("Giorno normale");
break;
}
β οΈ IMPORTANTE: Ogni case deve terminare con break
per uscire dallo switch.
Esercizio 3: Inserimento Orario Lezioni
Obiettivo
Assegnare una materia a una specifica fascia oraria e visualizzarla in una ListBox. Consentire anche la rimozione di un elemento inserito in modo coerente.

Clicca per ingrandire l'immagine
- Interfaccia
- ComboBox
(cmbMateria)per scegliere la materia - ComboBox
(cmbOra)per scegliere l'orario - ListBox
(lstOrario)per visualizzare le lezioni inserite - Button
(btnAdd)per aggiungere alla lista - Button
(btnRmn)per rimuovere la voce selezionata
- Codice di Esempio
Form1.cs - Gestione Orario Lezioni
using System;
using System.Windows.Forms;
namespace Orario
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InizializzaMateria();
InizializzaOrario();
}
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// METODO: Caricamento materie nella ComboBox
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
private void InizializzaMateria()
{
cmbMateria.Items.Add("Scegli materia");
cmbMateria.Items.Add("Italiano");
cmbMateria.Items.Add("Matematica");
cmbMateria.Items.Add("Informatica");
cmbMateria.Items.Add("Fisica");
cmbMateria.Items.Add("Chimica");
cmbMateria.SelectedIndex = 0;
}
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// METODO: Caricamento orari nella ComboBox
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
private void InizializzaOrario()
{
cmbOra.Items.Add("Scegli orario");
cmbOra.Items.Add("8:00 - 9:00");
cmbOra.Items.Add("9:00 - 10:00");
cmbOra.Items.Add("10:00 - 11:00");
cmbOra.Items.Add("11:00 - 12:00");
cmbOra.Items.Add("12:00 - 13:00");
cmbOra.SelectedIndex = 0;
}
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// EVENTO: Aggiunta materia + orario nella ListBox
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
private void btnAdd_Click(object sender, EventArgs e)
{
// Controllo se Γ¨ stata selezionata una materia valida
if (cmbMateria.SelectedIndex == 0)
{
MessageBox.Show("Selezionare una materia.",
"INFO",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
// Controllo se Γ¨ stato selezionato un orario valido
if (cmbOra.SelectedIndex == 0)
{
MessageBox.Show("Selezionare un orario.",
"INFO",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
// Aggiunge materia e orario alla ListBox
lstOrario.Items.Add(cmbMateria.SelectedItem + " " + cmbOra.SelectedItem);
}
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// EVENTO: Rimozione dell'elemento selezionato
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
private void btnRmn_Click(object sender, EventArgs e)
{
// Controllo se Γ¨ stato selezionato un elemento
if (lstOrario.SelectedIndex == -1)
{
MessageBox.Show("Selezionare un elemento da eliminare.",
"INFO",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
// Rimuove l'elemento selezionato
lstOrario.Items.RemoveAt(lstOrario.SelectedIndex);
}
}
}
Esercizio 4: Gestione Partecipazione al Corso
Obiettivo
Inserire studenti (Nome, Cognome, Classe) in una lista di partecipanti a un corso. Consentire anche la rimozione degli studenti inseriti.

Clicca per ingrandire l'immagine
- Interfaccia
- TextBox
(txtNome)per il nome - TextBox
(txtCognome)per il cognome - ComboBox
(cmbClasse)per scegliere la classe - Button
(btnAdd)per aggiungere lo studente al corso - ListBox
(lstCorso)per visualizzare gli studenti iscritti - Button
(btnRem)per rimuovere uno studente selezionato
- Codice di Esempio (Funzionante)
Form1.cs - Gestione Partecipazione Corso
using System;
using System.Windows.Forms;
namespace Partecipazione_corso
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InizializzaClassi();
}
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// METODO: Inizializza la ComboBox delle classi
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
private void InizializzaClassi()
{
cmbClasse.Items.Add("Seleziona Classe");
cmbClasse.Items.Add("1Β° C");
cmbClasse.Items.Add("2Β° C");
cmbClasse.Items.Add("3Β° C");
cmbClasse.Items.Add("4Β° C");
cmbClasse.Items.Add("5Β° C");
cmbClasse.SelectedIndex = 0;
}
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// EVENTO: Aggiunta studente al corso
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
private void btnAdd_Click(object sender, EventArgs e)
{
// βββββββββββββββββββββββββββββββββββββββββββββββββ
// STEP 1: Controllo che tutti i campi siano compilati
// βββββββββββββββββββββββββββββββββββββββββββββββββ
if (string.IsNullOrEmpty(txtNome.Text) ||
string.IsNullOrEmpty(txtCognome.Text) ||
cmbClasse.SelectedIndex == 0)
{
MessageBox.Show("Devi compilare tutti i campi",
"ERRORE",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
// βββββββββββββββββββββββββββββββββββββββββββββββββ
// STEP 2: Creazione stringa studente
// βββββββββββββββββββββββββββββββββββββββββββββββββ
string studente = $"{txtNome.Text} {txtCognome.Text} - CLASSE: {cmbClasse.SelectedItem}";
// βββββββββββββββββββββββββββββββββββββββββββββββββ
// STEP 3: Aggiunta nella ListBox
// βββββββββββββββββββββββββββββββββββββββββββββββββ
lstCorso.Items.Add(studente);
// βββββββββββββββββββββββββββββββββββββββββββββββββ
// STEP 4: Reset campi per nuovo inserimento
// βββββββββββββββββββββββββββββββββββββββββββββββββ
cmbClasse.SelectedIndex = 0;
txtNome.Text = "";
txtCognome.Text = "";
}
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// EVENTO: Rimozione studente dal corso
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
private void btnRem_Click(object sender, EventArgs e)
{
// Controllo se Γ¨ stato selezionato un elemento
if (lstCorso.SelectedIndex == -1)
{
MessageBox.Show("Seleziona uno studente da rimuovere",
"INFO",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
// Rimuove l'elemento selezionato
lstCorso.Items.Remove(lstCorso.SelectedItem);
}
}
}
Riassunto Comandi Principali
ListBox - Comandi Base
| Comando | Cosa fa | Esempio |
|---|---|---|
Items.Add() | Aggiunge elemento | listBox1.Items.Add("Nuovo"); |
Items.Clear() | Svuota tutta la lista | listBox1.Items.Clear(); |
Items.RemoveAt() | Rimuove in posizione | listBox1.Items.RemoveAt(0); |
SelectedIndex | Indice selezione | int pos = listBox1.SelectedIndex; |
SelectedItem | Elemento selezionato | string sel = listBox1.SelectedItem.ToString(); |
ComboBox - Comandi Base
| Comando | Cosa fa | Esempio |
|---|---|---|
Items.Add() | Aggiunge elemento | comboBox1.Items.Add("Opzione"); |
Items.AddRange() | Aggiunge array | comboBox1.Items.AddRange(new[]{"A","B"}); |
SelectedIndex | Indice selezione | comboBox1.SelectedIndex = 0; |
SelectedItem | Elemento selezionato | string scelta = comboBox1.SelectedItem.ToString(); |
Text | Testo visualizzato | string testo = comboBox1.Text; |
Spiegazione Stringa con $
Stringa Interpolata ($)
Il simbolo $ prima delle virgolette permette di inserire variabili direttamente nel testo usando { }.
// Sintassi:
string messaggio = $"Testo {variabile} testo";
// Esempi:
string nome = "Mario";
int eta = 25;
string messaggio1 = $"Ciao {nome}!";
// Risultato: "Ciao Mario!"
string messaggio2 = $"{nome} ha {eta} anni";
// Risultato: "Mario ha 25 anni"
string messaggio3 = $"Somma: {5 + 3}";
// Risultato: "Somma: 8"
Consigli Pratici per Programmare Meglio
1. Prima fai funzionare, poi migliora
Non cercare la perfezione subito. Scrivi codice che funziona, poi ottimizzalo.
2. Usa nomi chiari per i controlli
txtNome invece di textBox1
btnAggiungi invece di button1
lstProdotti invece di listBox1
3. Testa ogni bottone separatamente
Verifica ogni funzione prima di passare alla successiva. Così isoli gli errori.
4. Gestisci gli errori con MessageBox
Usa MessageBox.Show() per:
β’ Avvisare se mancano dati
β’ Confermare operazioni
β’ Mostrare errori
5. Pulisci i campi dopo ogni operazione
Dopo aver aggiunto un elemento: β’ Svuota TextBox β’ Riporta ComboBox al primo elemento β’ Metti il focus dove serve
6. Commenta il tuo codice
Scrivi commenti brevi che spiegano: β’ Cosa fa il metodo β’ PerchΓ© hai scelto quella soluzione β’ Quali dati si aspettano
Ben Fatto! Hai Completato gli Esercizi su ListBox e ComboBox
Ora sai usare ListBox e ComboBox per creare interfacce interattive! Prova a modificare gli esercizi o crearne di tuoi per consolidare le conoscenze.
π Prossimo Passo: dalle stringhe agli oggetti con il Progetto Parco Auto
π Teoria collegata (percorso C# β il linguaggio, esempi in console): Array e collezioni.