Formato della stringa di input non corretto.

di il
48 risposte

Formato della stringa di input non corretto.

Ciao sto programmando un programma che trovi il perimetro e l'area di un trapezio isoscele avendo b min, bse mag e altezza. Tutto sembra funzionare ma volevo aggiungere che quando non si scrive niente sulle textbox comparga una messagebox che dice di compilare tutti i campi (e questo effettivamente l'ho fatto, vi lascio il code sotto). Il problema è che quando clicco sul bottone calcola (non avendo messo i dati) compare questo errore: Formato della stringa di input non corretto.
private void btn_messagebox_Click(object sender, EventArgs e)
        {
            double basemagg = Convert.ToDouble(txt_basemagg.Text);
            double basemin = Convert.ToDouble(txt_basemin.Text);
            double altezza = Convert.ToDouble(txt_h.Text);

            double area;
            double perimetro;
            double p;
            double lato;

            p = (basemagg - basemin) / 2;
            lato = Math.Sqrt((p*p)+(altezza*altezza));
            perimetro = basemagg + basemin + (lato * 2);
            area = (basemagg + basemin) * altezza / 2;

            if (txt_basemagg.Text == null | txt_basemin.Text == null)
            {

                MessageBox.Show("compila tutti i campi");
            }

            else
            {


                MessageBox.Show("Perimetro = " + Math.Round(perimetro, 2) + "M area =" + area + "M^2");
            }
        }

48 Risposte

  • Re: Formato della stringa di input non corretto.

    Il valore della proprietà Text non equivale a null quando la casella è vuota, bensì a una stringa di lunghezza zero ("").

    Verifica la condizione usando la proprietà Length della stringa oppure con il metodo oppure .

    Ad esempio:
    
    if (String.IsNullOrWhiteSpace(txt_basemagg.Text) || String.IsNullOrWhiteSpace(txt_basemin.Text))
      MessageBox.Show("compila tutti i campi");
    
    Ciao!
  • Re: Formato della stringa di input non corretto.

    Oltre a quello che ti ha detto Alka, dovresti fare un Try/Catch per vedere se la conversione va a buon fine. Attenzione anche alla "Culture" utilizzata
  • Re: Formato della stringa di input non corretto.

    Mi associo, gli input incontrollati sono la fonte principale di errori nei programmi, e ci sono vari metodi per controllarli.
    Nel caso di una conversione da stringa a numero, te ne propongo una, che ti ripara dai guai anche se l'utente scrive lettere invece di numeri:

    EDIT: aggiunte info su CultureInfo
            private void btn_messagebox_Click(object sender, EventArgs e)
            {
                double basemagg = 0; 
                double basemin = 0;
                double altezza = 0; 
                string Messaggio = "";
    
                // TryParse, tenta la conversione e deposita il risultato nella variabile specificata in out
                // se la conversione va a buon fine la funzione restituisce true
    
                // Aggiungendo: using System.Globalization; si può usare CultureInfo.
                // CultureInfo, se omesso sarà quella del S.O in uso, attenzione ai punti decimali e virgole decimali
                // in un S.O. con CultureInfo "it-IT" viene accettata la virgola decimale, 
                // se nella Text viene digitato 10,2 verrà convertito in 10.2 (corretto)
                // se nella Text viene digitato 10.2 verrà interpretato come 102
                // Forzando la CultureInfo in "en-US"
                // se nella Text viene digitato 10.2 verrà convertito in 10.2 (corretto)
                // se nella Text viene digitato 10,2 verrà interpretato come 102
    
                // Esempio di conversione con una CultrueInfo specifica
                // if (double.TryParse(txt_basemagg.Text, NumberStyles.Any, new CultureInfo("en-US"), out basemagg) == true)
    
                // Conversione con CultureInfo omesso, viene usata quella del S.O.
                if (double.TryParse(txt_basemagg.Text, out basemagg) == true)
                {
                    txt_basemagg.Text = basemagg.ToString(); // mostra il risultato della conversione
                }
                else
                {
                     Messaggio = "Base Maggiore, ";
                }
     
                if (double.TryParse(txt_basemin.Text, out basemin) == true)
                {
                    txt_basemin.Text = basemin.ToString(); // mostra il risultato della conversione
                }
                else
                {
                    Messaggio += "Base minore, ";
                }
    
                if (double.TryParse(txt_h.Text,  out altezza) == true)
                {
                    txt_h.Text = altezza.ToString(); // mostra il risultato della conversione
                }
                else
                {
                    Messaggio += "Altezza, ";
                }
    
                if (Messaggio == "") // tutte le conversioni hanno avuto buon fine.
                {
                    double area;
                    double perimetro;
                    double p;
                    double lato;
    
                    p = (basemagg - basemin) / 2;
                    lato = Math.Sqrt((p * p) + (altezza * altezza));
                    perimetro = basemagg + basemin + (lato * 2);
                    area = (basemagg + basemin) * altezza / 2;
                    MessageBox.Show("Perimetro = " + Math.Round(perimetro, 2) + "M" + Environment.NewLine + "Area = " + area + "M^2");
                }
                else
                {
                    MessageBox.Show(Messaggio + "non compilato o valore errato");
                }
            }
  • Re: Formato della stringa di input non corretto.

    Buongiorno,
    non so se qualcuno puo' aiutarmi. in questa parte del codice se non do alcun valore alle due checkBox mi genera il messaggio come riportato, alla chiusura dello stesso mi da l'eccezione "System.Format.Exception: Formato della stringa di input non corretto.Quale puo' essere la causa?Spero qualcuno mi aiuti!!

    if (textBox3.Text == "") label17.Text = null;
    else
    {
    if (checkGed.Checked == true)
    {

    label17.Text = Convert.ToString(v + 10);
    label21.Text = Convert.ToString(10.00);
    label25.Text = Convert.ToString(15.00);
    }
    else if (checkSBYS.Checked == true)
    {

    label17.Text = Convert.ToString(v + 45);
    label21.Text = Convert.ToString(10.00);
    label25.Text = Convert.ToString(50.00);
    }
    else if ((checkGed.Checked == false) && (checkSBYS.Checked == false))
    {

    MessageBox.Show("Non è stata effettuata alcuna scelta!", "Attenzione!");

    }
    }
  • Re: Formato della stringa di input non corretto.

    Ti consiglio di aprire un nuovo post.

    Nel codice che hai mostrato senza usare il tag, l'errore che menzioni non può avvenire.
    Il debug non da errore in una parte di codice, lo da sulla riga esatta.

    il codice è privo di logica, se le CheckBox sono ambedue ceccate viene eseguito solo il codice di: checkGed
    controlli e ti lamenti con l'utente se non ha fatto una scelta....
    Perché non usi due RadioButton al posto delle CheckBox ?

    qui
    else if ((checkGed.Checked == false) && (checkSBYS.Checked == false))
    non serve ricontrollare se le CheckBox sono ceccate, se si è arrivati qui è sicuro che non sono ceccate.

    Cosa contiene v ?
    cosa dovrebbe scrivere l'utente in textBox3.Text e per fare cosa ?

  • Re: Formato della stringa di input non corretto.

    Nella TexBox3 viene inserito un valore decimal per il calcolo di spese di trasporto. La variabile v è un valore costante che si aggiunge alle ulteriori spese sempre decimal.
  • Re: Formato della stringa di input non corretto.

    Bene, allora a parte la logica che problema hai?
  • Re: Formato della stringa di input non corretto.

    Se non viene spuntato nessuno dei ceckbox e aziono il button per il calcolo mi da "formato della stringa non corretto"
  • Re: Formato della stringa di input non corretto.

    Ho provato ad usare un try/catch ma non considera nessuna eccezione, per questo ho provato ad aggiungere un ulteriore else if
  • Re: Formato della stringa di input non corretto.

    Come ti ho detto l'errore non è nel codice postato, forse usi il contenuto della textbox3 per fare qualche calcolo e se il contenuto non è un numero allora si che hai l'errore.
  • Re: Formato della stringa di input non corretto.

    Nonostante io inserisca un numero succede questo. Tra l'altro nel programma c'è già un try/catch che risolve il problema di caratteri string. Inoltre se spunta una delle due check e vado avanti tutto funziona, il problema c'è se nessuna delle check viene spuntata....
  • Re: Formato della stringa di input non corretto.

    Nel codice che hai postato anche se illogico, il problema non c'è, perché non posti la riga dove ricevi errore?.
    try catch, è esagerato per questo tipo di controllo, gli input si controllano con TryParse, riguarda il codice che ho postato qui:

    Rubik ha scritto:


            private void btn_messagebox_Click(object sender, EventArgs e)
            {
                double basemagg = 0; 
                double basemin = 0;
                double altezza = 0; 
                string Messaggio = "";
    
                // TryParse, tenta la conversione e deposita il risultato nella variabile specificata in out
                // se la conversione va a buon fine la funzione restituisce true
    
                // Aggiungendo: using System.Globalization; si può usare CultureInfo.
                // CultureInfo, se omesso sarà quella del S.O in uso, attenzione ai punti decimali e virgole decimali
                // in un S.O. con CultureInfo "it-IT" viene accettata la virgola decimale, 
                // se nella Text viene digitato 10,2 verrà convertito in 10.2 (corretto)
                // se nella Text viene digitato 10.2 verrà interpretato come 102
                // Forzando la CultureInfo in "en-US"
                // se nella Text viene digitato 10.2 verrà convertito in 10.2 (corretto)
                // se nella Text viene digitato 10,2 verrà interpretato come 102
    
                // Esempio di conversione con una CultrueInfo specifica
                // if (double.TryParse(txt_basemagg.Text, NumberStyles.Any, new CultureInfo("en-US"), out basemagg) == true)
    
                // Conversione con CultureInfo omesso, viene usata quella del S.O.
                if (double.TryParse(txt_basemagg.Text, out basemagg) == true)
                {
                    txt_basemagg.Text = basemagg.ToString(); // mostra il risultato della conversione
                }
                else
                {
                     Messaggio = "Base Maggiore, ";
                }
     
                if (double.TryParse(txt_basemin.Text, out basemin) == true)
                {
                    txt_basemin.Text = basemin.ToString(); // mostra il risultato della conversione
                }
                else
                {
                    Messaggio += "Base minore, ";
                }
    
                if (double.TryParse(txt_h.Text,  out altezza) == true)
                {
                    txt_h.Text = altezza.ToString(); // mostra il risultato della conversione
                }
                else
                {
                    Messaggio += "Altezza, ";
                }
    
                if (Messaggio == "") // tutte le conversioni hanno avuto buon fine.
                {
                    double area;
                    double perimetro;
                    double p;
                    double lato;
    
                    p = (basemagg - basemin) / 2;
                    lato = Math.Sqrt((p * p) + (altezza * altezza));
                    perimetro = basemagg + basemin + (lato * 2);
                    area = (basemagg + basemin) * altezza / 2;
                    MessageBox.Show("Perimetro = " + Math.Round(perimetro, 2) + "M" + Environment.NewLine + "Area = " + area + "M^2");
                }
                else
                {
                    MessageBox.Show(Messaggio + "non compilato o valore errato");
                }
            }
    apri un nuovo progetto, metti tre textbox con i nomi giusti: txt_basemagg, txt_basemin, txt_h ed un button di nome btn_messagebox
    Oppure posta tutto il codice, usando il tastino [</>] ....
  • Re: Formato della stringa di input non corretto.

    #######
  • Re: Formato della stringa di input non corretto.

    L'errore lo da su questa riga di codice
    s = Convert.ToDecimal(label19.Text) + Convert.ToDecimal(label20.Text) + Convert.ToDecimal(label21.Text) + Convert.ToDecimal(label22.Text

    ma solo quando non viene segnalata nessuna delle due chekedBox altrimenti tutto funziona.
Devi accedere o registrarti per scrivere nel forum
48 risposte