Applica le tue conoscenze di ListBox e ComboBox in un progetto divertente!.
β οΈ REGOLE OBBLIGATORIE:
INIZIALI COGNOME: Tutte le variabili e i metodi devono iniziare con le tue iniziali (es: Mario Rossi β mrNomeVariabile)
PENALITΓ: Se non rispetti questa regola, voto massimo: 3/10
ESEMPIO: mrListaGiochi, mrAggiungiGioco, mrControllaCampi
Concetti da applicare:
ListBox: Visualizza la tua collezione di videogiochi
ComboBox: Seleziona genere, piattaforma e valutazione
Items: La lista dei tuoi videogiochi
SelectedItem: Il videogioco che hai selezionato
SelectedIndex: La posizione del videogioco nella lista
Text: Il testo visualizzato nei controlli
Traccia della Verifica
Obiettivo
Creare un programma Windows Form per gestire la tua biblioteca personale di videogiochi. Il programma deve permettere di aggiungere, visualizzare, modificare, rimuovere e ordinare i videogiochi.
- Interfaccia Grafica Richiesta:
- TextBox:
mrTxtTitoloβ Titolo del videogioco - TextBox:
mrTxtSviluppatoreβ Nome dello sviluppatore - TextBox:
mrTxtAnnoβ Anno di pubblicazione - ComboBox:
mrCmbGenereβ Genere del videogioco - ComboBox:
mrCmbPiattaformaβ Piattaforma di gioco - ComboBox:
mrCmbValutazioneβ Tua valutazione (1-5 stelle) - Button:
mrBtnAggiungiβ Aggiungi videogioco - Button:
mrBtnModificaβ Modifica videogioco selezionato - Button:
mrBtnRimuoviβ Rimuovi videogioco selezionato - Button:
mrBtnPulisciβ Pulisci tutti i campi - Button:
mrBtnOrdinaTitoloβ Ordina per titolo - Button:
mrBtnOrdinaAnnoβ Ordina per anno - Button:
mrBtnOrdinaValutazioneβ Ordina per valutazione - ListBox:
mrLstBibliotecaβ Visualizza elenco videogiochi - Label:
mrLblContatoreβ Mostra quanti giochi hai in biblioteca
- FunzionalitΓ Richieste:
β
Usa una List<string> mrListaGiochi per salvare i videogiochi.
β
Implementa un metodo mrAggiornaBiblioteca() per aggiornare la ListBox.
β
Implementa un metodo mrControllaCampi() per verificare che tutti i campi siano compilati correttamente.
β
Implementa un metodo mrPulisciCampi() per svuotare i TextBox dopo l'aggiunta.
β Implementa la modifica di un videogioco esistente.
β Implementa l'ordinamento per titolo, anno e valutazione.
β Aggiorna automaticamente il contatore dei giochi.
β Gestisci gli errori (campi vuoti, anno non numerico, ecc.).
- Dettagli Implementazione:
- Il formato di ogni videogioco nella lista deve essere:
"Titolo - Sviluppatore - Anno - Genere - Piattaforma - β β β β β" - Le valutazioni devono essere visualizzate come stelle (es: β β β ββ per 3 stelle)
- I generi disponibili devono essere: Azione, Avventura, RPG, Sparatutto, Sport, Strategia, GDR
- Le piattaforme disponibili devono essere: PC, PlayStation, Xbox, Nintendo Switch, Mobile
- Quando si seleziona un gioco nella ListBox, i campi devono riempirsi automaticamente
- Il pulsante "Aggiungi" deve trasformarsi in "Modifica" quando si sta modificando un gioco
- Per ordinare, usa il metodo
Sort()con funzioni lambda come visto a lezione
Criteri di Valutazione
Punteggio - Tabella di Valutazione
| Competenza | Punti | Descrizione | Note |
|---|---|---|---|
| Iniziali Cognome | 2 | Tutte le variabili e metodi iniziano con le iniziali | Obbligatorio per voti > 3 |
| Interfaccia Grafica | 2 | Creazione corretta di tutti i controlli richiesti | Nomi, layout, funzionalitΓ base |
| Inizializzazione | 2 | List e ComboBox popolate correttamente | Valori di default impostati |
| Aggiunta Videogiochi | 3 | Implementazione completa btnAggiungi_Click | Controlli, validazione, formattazione |
| Modifica e Rimozione | 3 | Selezione, modifica e rimozione funzionanti | Cambio testo pulsante, conferme |
| Ordinamento | 4 | Ordinamento per titolo, anno e valutazione | Uso corretto di Sort() e lambda |
| Gestione Errori | 3 | MessageBox, controlli, pulizia codice | Codice ben strutturato e commentato |
| TOTALE | 19 | β Voto finale: punti / 1.9 | |
Esempi di Ordinamento
Risultato atteso dopo l'ordinamento
Ordina per Titolo

Alfabetico A-Z
mrListaGiochi.Sort((g1, g2) => { return g1.Split('-')[0].Trim() .CompareTo(g2.Split('-')[0].Trim()); });
Ordina per Anno

Dal piΓΉ vecchio
mrListaGiochi.Sort((g1, g2) => { int a1 = int.Parse(g1.Split('-')[2].Trim()); int a2 = int.Parse(g2.Split('-')[2].Trim()); return a1.CompareTo(a2); });
Ordina per Valutazione

Dalle 5 stelle
mrListaGiochi.Sort((g1, g2) => { int s1 = g1.Split('-')[5].Count(c => c == 'β
'); int s2 = g2.Split('-')[5].Count(c => c == 'β
'); return s2.CompareTo(s1); });
Esempi di risultato:
Per Titolo:
Call of Duty - ... - β β β β β
Cyberpunk 2077 - ... - β β β ββ
FIFA 23 - ... - β β β β β
Minecraft - ... - β β β β β
The Legend of Zelda - ... - β β β β β
Per Anno:
Minecraft (2011) - β β β β β
The Legend of Zelda (2017) - β β β β β
Cyberpunk 2077 (2020) - β β β ββ
FIFA 23 (2022) - β β β β β
Call of Duty (2022) - β β β β β
Per Valutazione:
β β β β β Minecraft
β β β β β The Legend of Zelda
β β β β β FIFA 23
β β β β β Call of Duty
β β β ββ Cyberpunk 2077
Suggerimenti per la Soluzione
Come procedere
- Inizia dall'interfaccia:
Crea prima tutti i controlli richiesti con i nomi corretti inizializzati con le tue iniziali. Aggiungi i 3 pulsanti per l'ordinamento.
- Inizializza le ComboBox:
Nel costruttore del form, popola le ComboBox con i valori richiesti per genere, piattaforma e valutazione (1-5 stelle).
- Implementa l'ordinamento:
Usa il metodo Sort() con funzioni lambda per ordinare la lista. Ricorda che il formato dei videogiochi Γ¨: "Titolo - Sviluppatore - Anno - Genere - Piattaforma - β
β
β
β
β"
Esempio completo ordinamento per titolo
private void mrBtnOrdinaTitolo_Click(object sender, EventArgs e)
{
mrListaGiochi.Sort((g1, g2) => {
string titolo1 = g1.Split('-')[0].Trim();
string titolo2 = g2.Split('-')[0].Trim();
return titolo1.CompareTo(titolo2);
});
mrAggiornaBiblioteca();
}
- Ordinamento per anno:
Per ordinare per anno, devi convertire la stringa in numero prima di confrontarla.
Esempio completo ordinamento per anno
private void mrBtnOrdinaAnno_Click(object sender, EventArgs e)
{
mrListaGiochi.Sort((g1, g2) => {
int anno1 = int.Parse(g1.Split('-')[2].Trim());
int anno2 = int.Parse(g2.Split('-')[2].Trim());
return anno1.CompareTo(anno2);
});
mrAggiornaBiblioteca();
}
- Ordinamento per valutazione:
Per ordinare per valutazione (stelle), conta il numero di β in ogni stringa.
Esempio completo ordinamento per valutazione
private void mrBtnOrdinaValutazione_Click(object sender, EventArgs e)
{
mrListaGiochi.Sort((g1, g2) => {
string val1 = g1.Split('-')[5].Trim();
string val2 = g2.Split('-')[5].Trim();
int stelle1 = val1.Count(c => c == 'β
');
int stelle2 = val2.Count(c => c == 'β
');
return stelle2.CompareTo(stelle1); // Decrescente
});
mrAggiornaBiblioteca();
}
Spiegazione: Funzioni Lambda
- Struttura base:
Le funzioni lambda ti permettono di definire come confrontare due elementi:
lista.Sort((elemento1, elemento2) => {
// Estrai dati da confrontare
// Restituisci:
// - negativo: elemento1 viene prima
// - zero: sono uguali
// - positivo: elemento1 viene dopo
});
- Ricorda il formato:
Ogni videogioco Γ¨ nel formato: "Titolo - Sviluppatore - Anno - Genere - Piattaforma - β
β
β
β
β"
string[] parti = gioco.Split('-');
// parti[0] = Titolo
// parti[2] = Anno (convertire in int)
// parti[5] = Valutazione (contare β
)
Informazioni per la Verifica
Istruzioni Finali
- Tempo a disposizione:
1:30 per chi ha PDP 2 ore
- Consegna:
Alla fine del tempo, consegnare il progetto completo con tutti i file sorgente.
- Valutazione:
Oltre al funzionamento, verrΓ valutata anche la pulizia del codice e l'organizzazione dell'interfaccia.
- Buona fortuna!
Ricorda di applicare tutto ciΓ² che abbiamo imparato con ListBox, ComboBox e ordinamento con lambda. NON DIMENTICARE LE INIZIALI!