Vai al contenuto

Esercizi con 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.

🎯 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.

Interfaccia Lista della Spesa

Clicca per ingrandire l'immagine

  1. 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
  1. 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.

Interfaccia Scelta Colori

Clicca per ingrandire l'immagine

  1. 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

  1. 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.

Interfaccia Orario Lezioni

Clicca per ingrandire l'immagine

  1. 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
  1. 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.

Interfaccia Gestione Corso

Clicca per ingrandire l'immagine

  1. 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
  1. 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 elementolistBox1.Items.Add("Nuovo");
Items.Clear()Svuota tutta la listalistBox1.Items.Clear();
Items.RemoveAt()Rimuove in posizionelistBox1.Items.RemoveAt(0);
SelectedIndexIndice selezioneint pos = listBox1.SelectedIndex;
SelectedItemElemento selezionatostring sel = listBox1.SelectedItem.ToString();

ComboBox - Comandi Base

Comando Cosa fa Esempio
Items.Add()Aggiunge elementocomboBox1.Items.Add("Opzione");
Items.AddRange()Aggiunge arraycomboBox1.Items.AddRange(new[]{"A","B"});
SelectedIndexIndice selezionecomboBox1.SelectedIndex = 0;
SelectedItemElemento selezionatostring scelta = comboBox1.SelectedItem.ToString();
TextTesto visualizzatostring 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.