📋 Controlli di Lista: ListBox e ComboBox
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.
Mostra tutti gli elementi, puoi sceglierne più di uno
Occupa poco spazio, mostra solo l’elemento selezionato
La lista degli elementi dentro questi controlli
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.
| 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 |
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
// 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);
// 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!");
}
// 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.
| 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
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
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;
}
case deve terminare con breakper 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.
- 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
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.
- 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
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 $
// 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
Non cercare la perfezione subito. Scrivi codice che funziona, poi ottimizzalo.
txtNome invece di textBox1
btnAggiungi invece di button1
lstProdotti invece di listBox1
Verifica ogni funzione prima di passare alla successiva. Così isoli gli errori.
Usa MessageBox.Show() per:
• Avvisare se mancano dati
• Confermare operazioni
• Mostrare errori
Dopo aver aggiunto un elemento:
• Svuota TextBox
• Riporta ComboBox al primo elemento
• Metti il focus dove serve
Scrivi commenti brevi che spiegano:
• Cosa fa il metodo
• Perché hai scelto quella soluzione
• Quali dati si aspettano
🎉 Ben Fatto! Hai Completato la Lezione 3
Ora sai usare ListBox e ComboBox per creare interfacce interattive!
Prova a modificare gli esercizi o crearne di tuoi per consolidare le conoscenze.