Imparare a programmare in C++ – #11 – Creare un BOT
Imparare a programmare in C++ – #11 – Creare un BOT: Sviluppo di un BOT che risponde in base al testo inserito dall’utente.
(altro…)Imparare a programmare in C++ – #11 – Creare un BOT: Sviluppo di un BOT che risponde in base al testo inserito dall’utente.
(altro…)Come creare frammenti di codice riutilizzabili in Visual Studio: Utilizzare gli snippet per inserire rapidamente frammenti di codice.
(altro…)Convertitore di Misure in C# – #4 – Integrare FontAwesome: utilizzare le icone di FontAwesome nel proprio progetto in WPF.
(altro…)Imparare a programmare in C++ | #10 | Successione di Fibonacci: La sequenza di Fibonacci scritta in C++.
(altro…)Imparare a programmare in C++ – #9 – scrivere e leggere un file: la libreria fstream permette di leggere e scrivere contenuto di testo all’interno di un file.
(altro…)Imparare a programmare in C++ – #8 – cmath e operazioni matematiche: cmath permette di eseguire operazioni matematiche più complesse.
(altro…)Convertitore di Misure in C# – #3 – Blend e Animazioni: Blend estende le funzioni di Visual Studio permettendo di facilitare la creazione di animazioni e comportamenti degli elementi.
(altro…)Imparare a programmare in C++ – #7 – Array: Gli array, vettori o matrici permettono di immagazzinare più valori all’interno di un unico elemento.
(altro…)Convertitore di Misure in C# – #2 – Debug e Impostazioni WPF: Utilizzo degli strumenti di debug in tempo reale e configurazione interfaccia grafica di Visual Studio per WPF.
Tempo di lettura stimato: 5 minuti
In questo secondo tutorial su WPF ci concentreremo su 2 aspetti:
Oltre a questi 2 aspetti, proseguiremo anche con lo sviluppo del nostro programma andando a scrivere il codice per la conversione delle unità di misura.
Avviando il programma con il tasto verde con scritto Connetti… andremo ad attivare alcuni elementi di debug in tempo reale utili per controllare e modificare gli elementi grafici senza dover chiudere l’applicazione.
Avremo infatti in alto sulla barra del titolo della nostra applicazione alcuni pulsanti utili per il debug.
Il primo ci permette di selezionare gli elementi e di vedere lo spazio che occupano e i loro margini.
Inoltre, grazie al ricaricamento rapido delle modifiche, possiamo fare qualsiasi modifica al codice XAML e vedere in diretta i risultati, senza dover riavviare il debug.
L’interfaccia grafica creata con WPF è di tipo vettoriale, questo significa che gli elementi sono disegnati dalla scheda video e che a qualsiasi risoluzione vengano impostati non perdono mai nitidezza.
Da Visual Studio è possibile regolare il livello di zoom del progetto per andare a vedere nel dettaglio un elemento o allontanare la vista per vedere il risultato d’insieme.
Per le dimensioni reali degli oggetti fare sempre attenzione a controllarli con lo zoom al 100%.
WPF permette anche di visualizzare una griglia di allineamento per poter allineare con maggiore precisione tutti gli elementi grafici, è anche possibile agganciare automaticamente gli elementi alla griglia.
Il tasto converti ha la funzione di leggere il valore inserito nella Textbox di origine, verificare la misura nella Combobox di origine, quella nella Combobox di destinazione e quindi mostrare il valore della conversione nella Textbox di destinazione.
Per fare questo utilizzeremo diverse condizioni, faremo quindi grande uso di If e Switch.
Il codice completo del tasto converti è:
private void btn_Converti_Click(object sender, RoutedEventArgs e)
{
/*
Chilometro = 0
Metro = 1
Decimetro = 2
Centimetro = 3
Millimetro = 4
*/
if (cmb_Origine.SelectedIndex == 0) // Chilometro
{
switch (cmb_Destinazione.SelectedIndex)
{
case 1:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) * 1000);
break;
case 2:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) * 10000);
break;
case 3:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) * 100000);
break;
case 4:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) * 1000000);
break;
default:
txt_Destinazione.Text = txt_Origine.Text;
break;
}
}
else if (cmb_Origine.SelectedIndex == 1) // Metro
{
switch (cmb_Destinazione.SelectedIndex)
{
case 0:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) / 1000);
break;
case 2:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) * 10);
break;
case 3:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) * 100);
break;
case 4:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) * 1000);
break;
default:
txt_Destinazione.Text = txt_Origine.Text;
break;
}
}
else if (cmb_Origine.SelectedIndex == 2) // Decimetro
{
switch (cmb_Destinazione.SelectedIndex)
{
case 0:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) / 10000);
break;
case 1:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) / 10);
break;
case 3:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) * 10);
break;
case 4:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) * 100);
break;
default:
txt_Destinazione.Text = txt_Origine.Text;
break;
}
}
else if (cmb_Origine.SelectedIndex == 3) // Centimetro
{
switch (cmb_Destinazione.SelectedIndex)
{
case 0:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) / 100000);
break;
case 1:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) / 100);
break;
case 2:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) / 10);
break;
case 4:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) * 10);
break;
default:
txt_Destinazione.Text = txt_Origine.Text;
break;
}
}
else if (cmb_Origine.SelectedIndex == 4) // Millimetro
{
switch (cmb_Destinazione.SelectedIndex)
{
case 0:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) / 1000000);
break;
case 1:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) / 1000);
break;
case 2:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) / 100);
break;
case 3:
txt_Destinazione.Text = Convert.ToString(Convert.ToDecimal(txt_Origine.Text) / 10);
break;
default:
txt_Destinazione.Text = txt_Origine.Text;
break;
}
}
else
{
txt_Destinazione.Text = txt_Origine.Text;
}
}
Per poter convertire correttamente i valori dobbiamo prima convertire la stringa di origine in decimale, eseguire quindi l’operazione e convertire il risultato in una stringa.
Un problema che si potrebbe verificare durante l’utilizzo del programma è che l’utente potrebbe selezionare un valore in origine che è già presente in destinazione.
Infatti quando selezioniamo un valore in origine, quello stesso valore viene bloccato nella destinazione, ma se quel valore fosse già selezionato, rimarrebbe comunque selezionato.
Per questo motivo andremo ad aggiungere un if all’evento DropDownClosed della combobox di origine per cambiare l’indice nel caso in cui sia uguale a quello di origine.
if (cmb_Origine.SelectedIndex == cmb_Destinazione.SelectedIndex)
{
if (cmb_Destinazione.SelectedIndex == 0)
{
cmb_Destinazione.SelectedIndex = 1;
}
else
{
cmb_Destinazione.SelectedIndex = cmb_Destinazione.SelectedIndex - 1;
}
}
In questo modo, quando si seleziona l’indice zero, la destinazione se dovesse essere 0 diventerà 1, quando si seleziona qualsiasi altro indice, la destinazione passerà all’indice precedente (quindi se era 4 diventa 3, se era 2 diventa 1).
Imparare a programmare in C++ – #6 – Break e Continue: Queste due istruzioni permettono di uscire anticipatamente da un ciclo al verificarsi di una determinata condizione.
(altro…)