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!
MessageBox.Show(“Ciao!”);
Sempre lo stesso testo fisso
string nome = txtNome.Text;
MessageBox.Show(“Ciao ” + nome + “!”);
Messaggio personalizzato!
- 🧮 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?)
┌─────────────────────────────────────────────────┐ │ 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)
Che tipo di dato contiene? (numero intero? testo? decimale?)
Come la chiami? (dev’essere unico e descrittivo)
Cosa contiene in questo momento?
📝 Dichiarare e Inizializzare 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
- ✅ Possono contenere: lettere, numeri, underscore (_)
- ✅ Devono iniziare con: lettera o underscore (non numero!)
- ❌ NON possono contenere: spazi, caratteri speciali (@, #, %, ecc.)
- ⚠️ Case-sensitive:
etàè diverso daEtà - 📌 Usa nomi descrittivi:
prezzoTotaleè meglio dix
| ❌ 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.
| 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
// 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)
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
// 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?)
// 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
// 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
// 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) |
// 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...
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)
// 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 |
// = (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!
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 |
come una tastiera calcolatrice. Il risultato appare sotto i bottoni.
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
}
}
}
Per ogni bottone:
- Doppio click su btnSomma → crea evento btnSomma_Click
- Doppio click su btnSottrazione → crea evento btnSottrazione_Click
- Doppio click su btnMoltiplicazione → crea evento btnMoltiplicazione_Click
- Doppio click su btnDivisione → crea evento btnDivisione_Click
🔍 Analisi Dettagliata del Codice
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!
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)
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!
- ✅ 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!
| 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 |
Multiline = True su una TextBox,l’utente può scrivere su più righe (premendo Invio). Perfetto per testi lunghi!
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
}
}
}
}
- Seleziona txtTesto nel Designer
- Premi F4 → Icona fulmine ⚡ (Eventi)
- Trova TextChanged
- Doppio click → Visual Studio crea il metodo
🔍 Come Funziona?
- Utente scrive "C" → Evento TextChanged si attiva
- Codice legge testo: "C" → lunghezza = 1
- Label aggiornata: "Caratteri: 1" (verde)
- Utente scrive "i" → Evento TextChanged si attiva di nuovo
- Codice legge testo: "Ci" → lunghezza = 2
- Label aggiornata: "Caratteri: 2" (verde)
- ...e così via per ogni carattere digitato!
- ✅ 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
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!
| 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 |
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 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
È 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)
- ✅
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
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!
| 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 |
public Form1()
{
InitializeComponent();
// Popola la ComboBox
cmbDirezione.Items.Add("Euro → Dollaro");
cmbDirezione.Items.Add("Dollaro → Euro");
cmbDirezione.SelectedIndex = 0; // Seleziona la prima opzione
}
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
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.
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)
string direzione = cmbDirezione.SelectedItem.ToString();
.SelectedItem restituisce l'elemento selezionato nella ComboBox.
Lo convertiamo in stringa con .ToString() per confrontarlo.
- ✅ 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)
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#!
| 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
// ========================================
// 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!");
}
- 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 (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
- Cos'è una variabile (scatola con etichetta)
- Dichiarazione e inizializzazione
- Regole per nomi validi
- Convenzioni camelCase
- int - Numeri interi
- double - Numeri decimali
- string - Testo
- bool - Vero/Falso
- DateTime - Date e ore
- Aritmetici: +, -, *, /, %
- Concatenazione stringhe
- Confronto: ==, !=, >, <
- Interpolazione: $"..."
- Convert.ToInt32(), ToDouble()
- TryParse per input sicuro
- Casting (int) e (double)
- Formattazione :F2, :C
- ✅ 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!
- Calcolatrice Avanzata: Aggiungi potenza (x^y) e radice quadrata alla calcolatrice
- Convertitore Universale: Temperatura (C°↔F°), Peso (kg↔lb), Distanza (km↔miglia)
- Contatore Parole: Oltre ai caratteri, conta anche le parole nel testo
- 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