Convertitore di Misure in C# – #2 – Debug e Impostazioni WPF

Convertitore di Misure in C# – #2 – Debug e Impostazioni WPF

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

Convertitore di Misure in C# – #2 – Debug e Impostazioni WPF

In questo secondo tutorial su WPF ci concentreremo su 2 aspetti:

  • Il debug in tempo reale
  • La modifica e l’utilizzo dell’interfaccia grafica di Visual Studio con WPF

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.

Il debug in tempo reale

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.

La modifica e l’utilizzo dell’interfaccia grafica di Visual Studio con WPF

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

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.

Modifica alla Combobox di origine

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

Video