Variabili, Tipi di Dato e Operatori in C#

Impara a memorizzare ed elaborare dati con progetti pratici Windows Forms

🎯 Cosa Imparerai in Questa Lezione

Nella Lezione 1 hai creato un bottone che mostra sempre lo stesso messaggio. Ma i programmi veri
elaborano dati: calcolano somme, convertono valute, contano caratteri.
Per fare tutto questo hai bisogno di variabili!

💡 Dal Messaggio Fisso ai Dati Dinamici

❌ Lezione 1 (Limitato)

MessageBox.Show(“Ciao!”);
Sempre lo stesso testo fisso

✅ Lezione 2 (Potente!)

string nome = txtNome.Text;
MessageBox.Show(“Ciao ” + nome + “!”);
Messaggio personalizzato!

🚀 Progetti Pratici che Costruiremo
  • 🧮 Mini-Calcolatrice: Somma, sottrazione, moltiplicazione, divisione
  • 📏 Contatore Caratteri: Conta mentre scrivi (come Twitter)
  • 🎂 Calcolatore Età: Inserisci anno di nascita, scopri la tua età
  • 💱 Convertitore Valute: Euro ↔ Dollaro in tempo reale

Ogni progetto ti insegnerà un aspetto diverso delle variabili!

📦 Cos’è una Variabile?

🎁 Analogia della Scatola

Immagina una variabile come una scatola con un’etichetta:

  • L’etichetta è il NOME della variabile (es: “età”, “nome”, “prezzo”)
  • Dentro la scatola c’è il VALORE (es: 25, “Mario”, 19.99)
  • Il tipo di scatola decide cosa può contenere (numeri? testo? date?)
Anatomia di una Variabile in C#
┌─────────────────────────────────────────────────┐
│  int età = 25;                                  │
│  └┬┘ └┬┘  └┬┘                                   │
│   │   │    │                                    │
│   │   │    └─ VALORE (il contenuto)            │
│   │   └────── NOME (l'etichetta)               │
│   └────────── TIPO (che tipo di dato?)         │
└─────────────────────────────────────────────────┘

ESEMPIO COMPLETO:
string nome = "Mario";
   │     │      │
   │     │      └─ Valore: la parola "Mario"
   │     └──────── Nome: chiamiamo questa variabile "nome"
   └────────────── Tipo: string (testo)

🔑 Tre Elementi Fondamentali di Ogni Variabile

1️⃣ TIPO

Che tipo di dato contiene? (numero intero? testo? decimale?)

2️⃣ NOME

Come la chiami? (dev’essere unico e descrittivo)

3️⃣ VALORE

Cosa contiene in questo momento?

📝 Dichiarare e Inizializzare Variabili

Sintassi Base delle Variabili
// DICHIARAZIONE: Creo la scatola (senza valore)
int età;

// INIZIALIZZAZIONE: Metto qualcosa nella scatola
età = 25;

// DICHIARAZIONE + INIZIALIZZAZIONE insieme (più comune)
int età = 25;

// Esempi con tipi diversi
string nome = "Mario";        // Testo
double prezzo = 19.99;        // Numero decimale
bool maggiorenne = true;      // Vero/Falso
DateTime oggi = DateTime.Now; // Data e ora attuale

💡 Regole per i Nomi delle Variabili
  • Possono contenere: lettere, numeri, underscore (_)
  • Devono iniziare con: lettera o underscore (non numero!)
  • NON possono contenere: spazi, caratteri speciali (@, #, %, ecc.)
  • ⚠️ Case-sensitive: età è diverso da Età
  • 📌 Usa nomi descrittivi: prezzoTotale è meglio di x
❌ SBAGLIATO ✅ CORRETTO Perché
2nomi nomi2 Non può iniziare con numero
prezzo totale prezzoTotale Niente spazi! Usa camelCase
prezzo$ prezzo Niente caratteri speciali
x contatoreClienti Usa nomi descrittivi!

🎨 Tipi di Dato in C#

In C# ogni variabile ha un tipo che definisce che tipo di dati può contenere.
È come dire che tipo di scatola usi: una per libri, una per vestiti, una per cibo.

📊 Tipi di Dato Principali

Tipo Cosa Contiene Esempi Quando Usarlo
int Numeri INTERI (senza virgola) 42, -10, 0, 1000 Età, contatori, quantità
double Numeri DECIMALI (con virgola) 3.14, 19.99, -5.5 Prezzi, misure, percentuali
string TESTO (parole, frasi) “Mario”, “Ciao mondo” Nomi, indirizzi, messaggi
bool VERO o FALSO true, false Condizioni, stati (acceso/spento)
char SINGOLO CARATTERE ‘A’, ‘5’, ‘@’ Iniziali, codici brevi
DateTime DATA e ORA 11/01/2026 14:30 Date di nascita, scadenze

🔢 Numeri: int vs double

Differenza tra int e double
// INT - Numeri INTERI (senza virgola)
int età = 25;              // ✅ OK
int studenti = 150;        // ✅ OK
int temperatura = -5;      // ✅ OK (anche negativi)
// int prezzo = 19.99;     // ❌ ERRORE! int non accetta decimali

// DOUBLE - Numeri DECIMALI (con virgola)
double prezzo = 19.99;     // ✅ OK
double peso = 72.5;        // ✅ OK
double pi = 3.14159;       // ✅ OK
double temperatura = -5.2; // ✅ OK

// ATTENZIONE: In C# si usa il PUNTO, non la virgola!
double corretto = 19.99;   // ✅ GIUSTO
// double sbagliato = 19,99; // ❌ ERRORE!

🤔 Quando Usare int e Quando double?

  • Usa int quando: Conti cose che non si possono dividere (persone, auto, libri)
  • Usa double quando: Hai bisogno di precisione decimale (soldi, misure, percentuali)
⚠️ Attenzione Matematica: Se dividi due int, il risultato è sempre un int!

int a = 10;
int b = 3;
int risultato = a / b;        // risultato = 3 (perde la virgola!)
double risultatoCorretto = (double)a / b; // 3.333... ✅

🔤 Stringhe: Testo tra Virgolette

Lavorare con le Stringhe
// DICHIARAZIONE stringhe
string nome = "Mario";
string cognome = "Rossi";
string email = "mario@email.com";

// CONCATENAZIONE - Unire stringhe con +
string nomeCompleto = nome + " " + cognome;  // "Mario Rossi"
string saluto = "Ciao " + nome + "!";        // "Ciao Mario!"

// INTERPOLAZIONE - Modo moderno (più leggibile)
string messaggio = $"Benvenuto {nome} {cognome}!";
// Risultato: "Benvenuto Mario Rossi!"

// PROPRIETÀ UTILI
int lunghezza = nome.Length;           // 5 (numero di caratteri)
string maiuscolo = nome.ToUpper();     // "MARIO"
string minuscolo = nome.ToLower();     // "mario"
bool contiene = email.Contains("@");   // true (contiene la chiocciola?)

💡 Stringhe: Virgolette Doppie, Caratteri: Virgolette Singole
// STRING - Virgolette DOPPIE " "
string parola = "Ciao";      // ✅ Corretto
// string errore = 'Ciao';   // ❌ Errore!

// CHAR - Virgolette SINGOLE ' '
char iniziale = 'M';         // ✅ Corretto
// char errore = "M";        // ❌ Errore!
// char errore2 = 'AB';      // ❌ Errore! Char = 1 solo carattere

✅❌ Boolean: Vero o Falso

Variabili Booleane
// BOOL - Solo due valori possibili: true o false
bool maggiorenne = true;
bool piove = false;
bool emailValida = email.Contains("@");  // true se contiene @

// USO PRATICO nei programmi
if (maggiorenne == true)  // o più semplicemente: if (maggiorenne)
{
    MessageBox.Show("Puoi votare!");
}
else
{
    MessageBox.Show("Sei ancora minorenne");
}

📅 DateTime: Date e Ore

Lavorare con Date
// OTTENERE DATA/ORA CORRENTE
DateTime adesso = DateTime.Now;              // 11/01/2026 14:30:45
DateTime soloData = DateTime.Today;          // 11/01/2026 00:00:00

// CREARE DATE SPECIFICHE
DateTime compleanno = new DateTime(2000, 5, 15);  // 15 Maggio 2000

// ESTRARRE COMPONENTI
int anno = adesso.Year;           // 2026
int mese = adesso.Month;          // 1 (Gennaio)
int giorno = adesso.Day;          // 11
int ora = adesso.Hour;            // 14

// CALCOLI CON DATE
int età = DateTime.Now.Year - compleanno.Year;  // Calcola età
DateTime domani = DateTime.Today.AddDays(1);    // Aggiunge 1 giorno
DateTime settimanaScorsa = DateTime.Now.AddDays(-7); // Sottrae 7 giorni

🧮 Operatori: Fare Calcoli e Confronti

Gli operatori sono simboli che permettono di fare operazioni su variabili:
somme, confronti, concatenazioni, ecc.

➕ Operatori Aritmetici (Matematica)

Operatore Nome Esempio Risultato
+ Addizione 5 + 3 8
- Sottrazione 10 - 4 6
* Moltiplicazione 6 * 7 42
/ Divisione 20 / 4 5
% Modulo (resto) 10 % 3 1 (10÷3 = 3 resto 1)
Esempi Pratici di Operazioni
// SOMMA
int a = 10;
int b = 5;
int somma = a + b;           // somma = 15

// MOLTIPLICAZIONE per calcolare totale
double prezzoCadauno = 19.99;
int quantità = 3;
double totale = prezzoCadauno * quantità;  // 59.97

// MODULO per capire se numero è pari o dispari
int numero = 7;
int resto = numero % 2;      // resto = 1 (dispari)
// Se resto == 0 → pari
// Se resto == 1 → dispari

// DIVISIONE intera vs decimale
int x = 10;
int y = 3;
int divIntera = x / y;              // 3 (perde decimali!)
double divDecimale = (double)x / y; // 3.333...

⚠️ Ordine delle Operazioni (Priorità)

Come in matematica, C# segue l’ordine: Parentesi → Moltiplicazione/Divisione → Addizione/Sottrazione

int risultato1 = 5 + 3 * 2;        // 11 (prima 3*2=6, poi 5+6=11)
int risultato2 = (5 + 3) * 2;      // 16 (prima 5+3=8, poi 8*2=16)

// USA LE PARENTESI per essere chiaro!
double media = (voto1 + voto2 + voto3) / 3;  // ✅ Corretto

🔗 Operatori di Concatenazione (Stringhe)

Unire Stringhe
// CONCATENAZIONE con +
string nome = "Mario";
string cognome = "Rossi";
string completo = nome + " " + cognome;  // "Mario Rossi"

// MESCOLARE stringhe e numeri
int età = 25;
string messaggio = "Hai " + età + " anni";  // "Hai 25 anni"

// INTERPOLAZIONE (moderno e più leggibile)
string msg = $"Ciao {nome}, hai {età} anni";
// Risultato: "Ciao Mario, hai 25 anni"

// ATTENZIONE: + con numeri SOMMA, con stringhe UNISCE!
int somma = 5 + 3;           // 8 (somma matematica)
string testo = "5" + "3";    // "53" (concatenazione!)

⚖️ Operatori di Confronto

Operatore Significato Esempio Risultato
== Uguale a 5 == 5 true
!= Diverso da 5 != 3 true
> Maggiore di 10 > 5 true
< Minore di 3 < 8 true
>= Maggiore o uguale 5 >= 5 true
<= Minore o uguale 4 <= 3 false
⚠️ Attenzione: = vs ==
// = (UN SOLO UGUALE) → ASSEGNAZIONE
int x = 5;        // "Assegna il valore 5 a x"

// == (DUE UGUALI) → CONFRONTO
if (x == 5)       // "x è uguale a 5?" (true/false)
{
    MessageBox.Show("x vale 5!");
}

// ERRORE COMUNE!
// if (x = 5)  // ❌ SBAGLIATO! Stai assegnando, non confrontando

🧮 Progetto 1: Mini-Calcolatrice

Creiamo una calcolatrice semplice che somma, sottrae, moltiplica e divide due numeri.
Imparerai a leggere dati dalle TextBox, convertirli in numeri
e mostrare il risultato!

1

Crea l’Interfaccia Grafica

Aggiungi questi controlli al Form:

Controllo Name Text/Proprietà
Label lblTitolo Text: “Calcolatrice Semplice”, Font: 16pt Bold
Label lblNumero1 Text: “Primo numero:”
TextBox txtNumero1 Text: (vuoto)
Label lblNumero2 Text: “Secondo numero:”
TextBox txtNumero2 Text: (vuoto)
Button btnSomma Text: “+”, Size: 50×40, Font: 14pt Bold
Button btnSottrazione Text: “-“, Size: 50×40
Button btnMoltiplicazione Text: “*”, Size: 50×40
Button btnDivisione Text: “/”, Size: 50×40
Label lblRisultato Text: “Risultato: –“, Font: 14pt Bold, ForeColor: Blue
💡 Layout Suggerito: Disponi i 4 bottoni in orizzontale sotto le TextBox,
come una tastiera calcolatrice. Il risultato appare sotto i bottoni.

2

Il Codice Completo

Calcolatrice.cs
using System;
using System.Windows.Forms;

namespace Calcolatrice
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // ========================================
        // EVENTO: Somma (+)
        // ========================================
        private void btnSomma_Click(object sender, EventArgs e)
        {
            // 1️⃣ LEGGERE i valori dalle TextBox (sono stringhe!)
            string testo1 = txtNumero1.Text;
            string testo2 = txtNumero2.Text;
            
            // 2️⃣ CONVERTIRE stringhe → numeri
            double numero1 = Convert.ToDouble(testo1);
            double numero2 = Convert.ToDouble(testo2);
            
            // 3️⃣ CALCOLARE la somma
            double somma = numero1 + numero2;
            
            // 4️⃣ MOSTRARE il risultato
            lblRisultato.Text = $"Risultato: {somma}";
        }

        // ========================================
        // EVENTO: Sottrazione (-)
        // ========================================
        private void btnSottrazione_Click(object sender, EventArgs e)
        {
            double numero1 = Convert.ToDouble(txtNumero1.Text);
            double numero2 = Convert.ToDouble(txtNumero2.Text);
            
            double differenza = numero1 - numero2;
            
            lblRisultato.Text = $"Risultato: {differenza}";
        }

        // ========================================
        // EVENTO: Moltiplicazione (*)
        // ========================================
        private void btnMoltiplicazione_Click(object sender, EventArgs e)
        {
            double numero1 = Convert.ToDouble(txtNumero1.Text);
            double numero2 = Convert.ToDouble(txtNumero2.Text);
            
            double prodotto = numero1 * numero2;
            
            lblRisultato.Text = $"Risultato: {prodotto}";
        }

        // ========================================
        // EVENTO: Divisione (/)
        // ========================================
        private void btnDivisione_Click(object sender, EventArgs e)
        {
            double numero1 = Convert.ToDouble(txtNumero1.Text);
            double numero2 = Convert.ToDouble(txtNumero2.Text);
            
            // CONTROLLO: Non dividere per zero!
            if (numero2 == 0)
            {
                MessageBox.Show("Impossibile dividere per zero!", 
                              "Errore", 
                              MessageBoxButtons.OK, 
                              MessageBoxIcon.Error);
                return; // Esci dal metodo senza fare nulla
            }
            
            double quoziente = numero1 / numero2;
            
            lblRisultato.Text = $"Risultato: {quoziente:F2}"; // F2 = 2 decimali
        }
    }
}

3

Collega gli Eventi

Per ogni bottone:

  1. Doppio click su btnSomma → crea evento btnSomma_Click
  2. Doppio click su btnSottrazione → crea evento btnSottrazione_Click
  3. Doppio click su btnMoltiplicazione → crea evento btnMoltiplicazione_Click
  4. Doppio click su btnDivisione → crea evento btnDivisione_Click

🔍 Analisi Dettagliata del Codice

1️⃣ Leggere i Valori dalle TextBox

string testo1 = txtNumero1.Text;  // "10" (stringa, non numero!)

La proprietà .Text di una TextBox restituisce SEMPRE una stringa,
anche se l’utente ha scritto un numero. Dobbiamo convertirla!

2️⃣ Convertire Stringa → Numero

double numero1 = Convert.ToDouble(testo1);  // "10" → 10.0

Convert.ToDouble() trasforma una stringa in un numero decimale.
Se l’utente scrive “ciao”, il programma va in errore! (Vedremo come gestirlo meglio dopo)

3️⃣ Calcolare e Mostrare

double somma = numero1 + numero2;
lblRisultato.Text = $"Risultato: {somma}";

Facciamo il calcolo e CONVERTIAMO il numero in stringa per mostrarlo nella Label.
L’interpolazione $"..." fa la conversione automaticamente!

🎯 Concetti Applicati in Questo Progetto

  • ✅ Leggere input utente con .Text
  • ✅ Conversione stringa→numero con Convert.ToDouble()
  • ✅ Operatori aritmetici: +, -, *, /
  • ✅ Interpolazione stringhe con $"..."
  • ✅ Controllo divisione per zero con if
  • ✅ Formattazione decimali con :F2

📏 Progetto 2: Contatore Caratteri

Crea un’applicazione che conta i caratteri mentre scrivi, proprio come Twitter che ti dice
quanti caratteri hai usato. Imparerai a usare l’evento TextChanged e la
proprietà Length delle stringhe!

1

Interfaccia

Controllo Name Proprietà Importanti
Label lblTitolo Text: “Scrivi il tuo testo:”, Font: 12pt Bold
TextBox txtTesto Multiline: True, Size: 350×150, ScrollBars: Vertical
Label lblContatore Text: “Caratteri: 0”, Font: 14pt Bold, ForeColor: Green
💡 Proprietà Multiline: Quando imposti Multiline = True su una TextBox,
l’utente può scrivere su più righe (premendo Invio). Perfetto per testi lunghi!

2

Il Codice

ContatoreCaratteri.cs
using System;
using System.Windows.Forms;

namespace ContatoreCaratteri
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // ========================================
        // EVENTO: TextChanged - Si attiva OGNI VOLTA che il testo cambia
        // ========================================
        private void txtTesto_TextChanged(object sender, EventArgs e)
        {
            // 1️⃣ Leggi il testo corrente dalla TextBox
            string testo = txtTesto.Text;
            
            // 2️⃣ Conta i caratteri con la proprietà .Length
            int numeroCaratteri = testo.Length;
            
            // 3️⃣ Aggiorna la Label in tempo reale
            lblContatore.Text = $"Caratteri: {numeroCaratteri}";
            
            // 4️⃣ BONUS: Cambia colore in base al numero di caratteri
            if (numeroCaratteri == 0)
            {
                lblContatore.ForeColor = Color.Gray;  // Grigio se vuoto
            }
            else if (numeroCaratteri < 100)
            {
                lblContatore.ForeColor = Color.Green;  // Verde sotto 100
            }
            else if (numeroCaratteri < 200)
            {
                lblContatore.ForeColor = Color.Orange; // Arancione 100-200
            }
            else
            {
                lblContatore.ForeColor = Color.Red;    // Rosso oltre 200
            }
        }
    }
}

3

Collega l'Evento TextChanged

  1. Seleziona txtTesto nel Designer
  2. Premi F4 → Icona fulmine ⚡ (Eventi)
  3. Trova TextChanged
  4. Doppio click → Visual Studio crea il metodo

🔍 Come Funziona?

Sequenza degli Eventi:

  1. Utente scrive "C" → Evento TextChanged si attiva
  2. Codice legge testo: "C" → lunghezza = 1
  3. Label aggiornata: "Caratteri: 1" (verde)
  4. Utente scrive "i" → Evento TextChanged si attiva di nuovo
  5. Codice legge testo: "Ci" → lunghezza = 2
  6. Label aggiornata: "Caratteri: 2" (verde)
  7. ...e così via per ogni carattere digitato!

🎯 Concetti Applicati

  • ✅ Evento TextChanged - Si attiva ad ogni modifica del testo
  • ✅ Proprietà .Length - Lunghezza di una stringa
  • ✅ Condizioni if-else if-else - Decisioni in base a condizioni
  • ✅ Cambiare colori dinamicamente con Color
  • ✅ Aggiornamento in tempo reale dell'interfaccia
💪 Sfida Opzionale

Prova ad aggiungere:

  • 📊 Un'altra Label che conta le PAROLE (usa text.Split(' ').Length)
  • 📏 Limite massimo di 280 caratteri (come Twitter)
  • 🔤 Contatore di vocali e consonanti

🎂 Progetto 3: Calcolatore Età

Crea un'app che calcola l'età in base all'anno di nascita. Imparerai a lavorare con
DateTime, fare sottrazione tra date e formattare l'output!

1

Interfaccia

Controllo Name Text/Proprietà
Label lblTitolo Text: "Calcola la Tua Età", Font: 16pt Bold
Label lblAnno Text: "Anno di nascita:"
TextBox txtAnnoNascita Text: (vuoto)
Button btnCalcola Text: "Calcola Età", Size: 120x35
Label lblRisultato Text: "", Font: 14pt Bold, ForeColor: Blue

2

Il Codice Completo

CalcolatoreEta.cs
using System;
using System.Windows.Forms;

namespace CalcolatoreEta
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnCalcola_Click(object sender, EventArgs e)
        {
            // 1️⃣ Leggi l'anno di nascita dalla TextBox
            string testoAnno = txtAnnoNascita.Text;
            
            // 2️⃣ Controlla che non sia vuoto
            if (string.IsNullOrEmpty(testoAnno))
            {
                MessageBox.Show("Inserisci l'anno di nascita!", 
                              "Attenzione", 
                              MessageBoxButtons.OK, 
                              MessageBoxIcon.Warning);
                return;
            }
            
            // 3️⃣ Converti in numero intero
            int annoNascita = Convert.ToInt32(testoAnno);
            
            // 4️⃣ Ottieni l'anno corrente
            int annoCorrente = DateTime.Now.Year;  // 2026
            
            // 5️⃣ Calcola l'età (sottrazione semplice)
            int età = annoCorrente - annoNascita;
            
            // 6️⃣ Validazione: età sensata?
            if (età < 0)
            {
                MessageBox.Show("Non puoi essere nato nel futuro!", 
                              "Errore", 
                              MessageBoxButtons.OK, 
                              MessageBoxIcon.Error);
                return;
            }
            else if (età > 120)
            {
                MessageBox.Show("Età non realistica!", 
                              "Errore", 
                              MessageBoxButtons.OK, 
                              MessageBoxIcon.Error);
                return;
            }
            
            // 7️⃣ Mostra il risultato con messaggio personalizzato
            lblRisultato.Text = $"Hai {età} anni!";
            
            // 8️⃣ BONUS: Messaggi diversi in base all'età
            string messaggio = "";
            if (età < 18)
            {
                messaggio = $"Hai {età} anni. Sei minorenne!";
            }
            else if (età < 65)
            {
                messaggio = $"Hai {età} anni. Sei nel fiore degli anni!";
            }
            else
            {
                messaggio = $"Hai {età} anni. Saggezza e esperienza!";
            }
            
            MessageBox.Show(messaggio, 
                          "La Tua Età", 
                          MessageBoxButtons.OK, 
                          MessageBoxIcon.Information);
        }
    }
}

🔍 Concetti Chiave del Codice

DateTime.Now.Year

DateTime.Now restituisce la data e ora CORRENTE del computer.
La proprietà .Year estrae solo l'anno (es: 2026).

DateTime adesso = DateTime.Now;  // 11/01/2026 14:30:45
int anno = adesso.Year;          // 2026
int mese = adesso.Month;         // 1 (Gennaio)
int giorno = adesso.Day;         // 11

Validazione Input

È FONDAMENTALE controllare sempre ciò che l'utente inserisce! Nel codice controlliamo:

  • ✅ Campo non vuoto (IsNullOrEmpty)
  • ✅ Età non negativa (non nato nel futuro)
  • ✅ Età realistica (massimo 120 anni)

🎯 Concetti Applicati

  • DateTime.Now - Data e ora corrente
  • ✅ Estrazione componenti data con .Year, .Month, .Day
  • ✅ Validazione input con controlli if
  • ✅ Conversione string → int con Convert.ToInt32()
  • ✅ Condizioni annidate (if dentro if)
  • ✅ Messaggi personalizzati in base a condizioni
💪 Sfida Avanzata

Migliora il calcolatore aggiungendo:

  • 📅 Chiedi anche mese e giorno di nascita per calcolo preciso (considera se compleanno già passato)
  • 🎉 Calcola quanti giorni mancano al prossimo compleanno
  • 📊 Mostra in quanti giorni, mesi e anni hai vissuto

💱 Progetto 4: Convertitore Euro ↔ Dollaro

Crea un convertitore di valute che trasforma Euro in Dollari e viceversa.
Imparerai a usare ComboBox, moltiplicazioni con decimali e
formattazione valute!

1

Interfaccia

Controllo Name Text/Proprietà
Label lblTitolo Text: "Convertitore Valute", Font: 16pt Bold
Label lblImporto Text: "Importo:"
TextBox txtImporto Text: (vuoto)
Label lblDirezione Text: "Converti:"
ComboBox cmbDirezione Items: "Euro → Dollaro", "Dollaro → Euro"
Button btnConverti Text: "Converti", Size: 120x35
Label lblRisultato Text: "", Font: 14pt Bold, ForeColor: Green
💡 Popolare la ComboBox: Nel costruttore del Form, aggiungi:

public Form1()
{
    InitializeComponent();
    
    // Popola la ComboBox
    cmbDirezione.Items.Add("Euro → Dollaro");
    cmbDirezione.Items.Add("Dollaro → Euro");
    cmbDirezione.SelectedIndex = 0;  // Seleziona la prima opzione
}

2

Il Codice Completo

ConvertitoreValute.cs
using System;
using System.Windows.Forms;

namespace ConvertitoreValute
{
    public partial class Form1 : Form
    {
        // ========================================
        // COSTANTI: Tassi di cambio (valori fissi)
        // ========================================
        private const double TASSO_EURO_DOLLARO = 1.10;    // 1 Euro = 1.10 Dollari
        private const double TASSO_DOLLARO_EURO = 0.91;    // 1 Dollaro = 0.91 Euro
        
        public Form1()
        {
            InitializeComponent();
            
            // Popola la ComboBox
            cmbDirezione.Items.Add("Euro → Dollaro");
            cmbDirezione.Items.Add("Dollaro → Euro");
            cmbDirezione.SelectedIndex = 0;
        }

        private void btnConverti_Click(object sender, EventArgs e)
        {
            // 1️⃣ Leggi l'importo dalla TextBox
            string testoImporto = txtImporto.Text;
            
            // 2️⃣ Validazione: campo vuoto?
            if (string.IsNullOrEmpty(testoImporto))
            {
                MessageBox.Show("Inserisci un importo da convertire!", 
                              "Attenzione", 
                              MessageBoxButtons.OK, 
                              MessageBoxIcon.Warning);
                txtImporto.Focus();
                return;
            }
            
            // 3️⃣ Converti in numero decimale
            double importo = Convert.ToDouble(testoImporto);
            
            // 4️⃣ Validazione: importo positivo?
            if (importo <= 0)
            {
                MessageBox.Show("L'importo deve essere maggiore di zero!", 
                              "Errore", 
                              MessageBoxButtons.OK, 
                              MessageBoxIcon.Error);
                return;
            }
            
            // 5️⃣ Scopri quale conversione fare (leggi ComboBox)
            string direzione = cmbDirezione.SelectedItem.ToString();
            
            // 6️⃣ Variabili per il risultato
            double risultato = 0;
            string messaggioValuta = "";
            
            // 7️⃣ Calcola in base alla direzione scelta
            if (direzione == "Euro → Dollaro")
            {
                risultato = importo * TASSO_EURO_DOLLARO;
                messaggioValuta = $"{importo:F2} € = {risultato:F2} $";
            }
            else if (direzione == "Dollaro → Euro")
            {
                risultato = importo * TASSO_DOLLARO_EURO;
                messaggioValuta = $"{importo:F2} $ = {risultato:F2} €";
            }
            
            // 8️⃣ Mostra il risultato
            lblRisultato.Text = messaggioValuta;
            
            // 9️⃣ MessageBox con dettagli
            MessageBox.Show($"Conversione completata!\n\n{messaggioValuta}\n\nTasso applicato: {(direzione == "Euro → Dollaro" ? TASSO_EURO_DOLLARO : TASSO_DOLLARO_EURO)}", 
                          "Risultato Conversione", 
                          MessageBoxButtons.OK, 
                          MessageBoxIcon.Information);
        }
    }
}

🔍 Novità Importanti nel Codice

🔒 Costanti (const)

private const double TASSO_EURO_DOLLARO = 1.10;

Una costante è una variabile che NON può cambiare valore.
Usiamo const per valori fissi come tassi di cambio, pi greco (3.14), ecc.
Convenzione: nomi in MAIUSCOLO per distinguerle.

📊 Formattazione Valute (:F2)

string messaggio = $"{importo:F2} €";  // 19,99 €

:F2 formatta il numero con 2 decimali fissi. Perfetto per valute!

  • :F0 → Nessun decimale (es: 20)
  • :F2 → 2 decimali (es: 19,99)
  • :C → Formato valuta locale (es: € 19,99)
📦 Leggere dalla ComboBox

string direzione = cmbDirezione.SelectedItem.ToString();

.SelectedItem restituisce l'elemento selezionato nella ComboBox.
Lo convertiamo in stringa con .ToString() per confrontarlo.

🎯 Concetti Applicati

  • ✅ Costanti con const - Valori fissi che non cambiano
  • ✅ ComboBox con .Items.Add() e .SelectedItem
  • ✅ Moltiplicazione per conversioni
  • ✅ Formattazione decimali con :F2
  • ✅ Condizioni multiple (if-else if) per logica decisionale
  • ✅ Validazione input (campo vuoto, valore negativo)
💪 Sfida Avanzata

Migliora il convertitore aggiungendo:

  • 💱 Altre valute (Sterlina, Yen, Franco Svizzero)
  • 🌐 TextBox per inserire tasso di cambio personalizzato
  • 🔄 Bottone per invertire automaticamente la direzione
  • 📊 Storico delle conversioni in una ListBox

🔄 Conversioni tra Tipi di Dato

Nei progetti precedenti hai visto conversioni come Convert.ToDouble().
Approfondiamo tutte le tecniche di conversione in C#!

🔀 Metodi di Conversione Principali

Metodo Da → A Esempio
Convert.ToInt32() string → int int x = Convert.ToInt32("42");
Convert.ToDouble() string → double double y = Convert.ToDouble("3.14");
Convert.ToString() numero → string string s = Convert.ToString(42);
.ToString() qualsiasi → string string s = età.ToString();
int.Parse() string → int int x = int.Parse("42");
double.Parse() string → double double y = double.Parse("3.14");
int.TryParse() string → int (sicuro) int.TryParse("abc", out int x);

⚠️ Convert vs Parse vs TryParse

Differenze tra Metodi di Conversione
// ========================================
// 1. Convert.ToInt32() - Va in ERRORE se fallisce
// ========================================
int numero1 = Convert.ToInt32("42");      // ✅ OK → 42
// int numero2 = Convert.ToInt32("abc");  // ❌ ERRORE! Programma si blocca

// ========================================
// 2. int.Parse() - Identico a Convert (va in errore)
// ========================================
int numero3 = int.Parse("42");            // ✅ OK → 42
// int numero4 = int.Parse("abc");        // ❌ ERRORE! Programma si blocca

// ========================================
// 3. int.TryParse() - SICURO! Non va mai in errore
// ========================================
bool successo = int.TryParse("42", out int risultato);
// successo = true, risultato = 42

bool fallito = int.TryParse("abc", out int risultato2);
// fallito = false, risultato2 = 0 (valore di default)

// USO PRATICO: TryParse nei programmi reali
string input = txtNumero.Text;
if (int.TryParse(input, out int numero))
{
    MessageBox.Show($"Numero valido: {numero}");
}
else
{
    MessageBox.Show("Inserisci un numero valido!");
}

💡 Quando Usare Quale Metodo?
  • Convert: Quando SEI SICURO che la stringa è un numero valido
  • Parse: Identico a Convert (usa uno o l'altro)
  • TryParse: Quando l'utente inserisce il dato (CONSIGLIATO!) perché non va in errore

🔢 Casting: Conversione tra Numeri

Casting Implicito ed Esplicito
// ========================================
// CASTING IMPLICITO (automatico) - da "piccolo" a "grande"
// ========================================
int piccolo = 10;
double grande = piccolo;     // ✅ OK - int → double automatico
// 10 diventa 10.0

// ========================================
// CASTING ESPLICITO (manuale) - da "grande" a "piccolo"
// ========================================
double decimale = 9.99;
int intero = (int)decimale;  // ⚠️ Perde i decimali! intero = 9

// ATTENZIONE: Divisione tra interi
int a = 10;
int b = 3;
int risultatoIntero = a / b;              // 3 (perde decimali!)
double risultatoCorretto = (double)a / b; // 3.333... ✅

// ALTERNATIVA: usa direttamente double
double x = 10.0;
double y = 3.0;
double risultato = x / y;  // 3.333...

🎓 Riepilogo Completo della Lezione

✅ Cosa Hai Imparato

📦 Variabili

  • Cos'è una variabile (scatola con etichetta)
  • Dichiarazione e inizializzazione
  • Regole per nomi validi
  • Convenzioni camelCase
🎨 Tipi di Dato

  • int - Numeri interi
  • double - Numeri decimali
  • string - Testo
  • bool - Vero/Falso
  • DateTime - Date e ore
🧮 Operatori

  • Aritmetici: +, -, *, /, %
  • Concatenazione stringhe
  • Confronto: ==, !=, >, <
  • Interpolazione: $"..."
🔄 Conversioni

  • Convert.ToInt32(), ToDouble()
  • TryParse per input sicuro
  • Casting (int) e (double)
  • Formattazione :F2, :C

🚀 Progetti Realizzati
  • Mini-Calcolatrice: Operazioni matematiche di base
  • Contatore Caratteri: Aggiornamento in tempo reale con TextChanged
  • Calcolatore Età: DateTime e validazione input
  • Convertitore Valute: ComboBox e costanti

🎯 Prossimi Passi

📖 Nella Lezione 3 Imparerai:

  • 🔀 Strutture di Controllo: if, else, else if per prendere decisioni
  • 🔄 Switch Statement: Scegliere tra molte opzioni
  • 🎯 Operatori Logici: AND (&&), OR (||), NOT (!)
  • 💡 Progetti Pratici: Quiz interattivo, Calcolatrice BMI, Sistema voti

🎯 Con le strutture di controllo i tuoi programmi potranno DECIDERE cosa fare
in base alle condizioni!

💪 Esercizi Prima della Prossima Lezione
  1. Calcolatrice Avanzata: Aggiungi potenza (x^y) e radice quadrata alla calcolatrice
  2. Convertitore Universale: Temperatura (C°↔F°), Peso (kg↔lb), Distanza (km↔miglia)
  3. Contatore Parole: Oltre ai caratteri, conta anche le parole nel testo
  4. Calcolatore Sconto: Inserisci prezzo e percentuale sconto, calcola prezzo finale

Lezione 2 - Variabili, Tipi di Dato e Operatori

Corso C# Completo con Interfaccia Grafica - Da Zero a Esperto

Torna in alto