Formato della stringa di input non corretto.

di il
48 risposte

48 Risposte - Pagina 2

  • Re: Formato della stringa di input non corretto.

    kenlu ha scritto:


    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
    Al netto che dovresti formattare il codice usando l'apposito pulsante </> posizionato sopra la casella del messaggio, in questi casi l'uso del Convert.ToDecimal() impiegato in questo modo è troppo generico: devi usare con una minima gestione di errore nell'input, oppure , con la possibilità di specificare anche la "cultura" da utilizzare, ovvero le regole in base alle quali si interpreta correttamente la stringa e i simboli in essa contenuti per ottenere il corrispondente valore numerico decimale.

    Nella documentazione ufficiale linkata trovi una marea di esempi per tutti i vari utilizzi.

    Prima di "fidarti" dell'input dell'utente, devi verificare che ogni casella di testo contenga i valori che ti aspetti (non abbiano lunghezza zero) e che il valore sia convertibile in numero, facendo seguire a questa validazione i calcoli corrispondenti che ti interessano.

    Oltre a questo, sembra che tu stia convertendo il testo di alcune Label che potrebbero non essere valorizzate; ci aggiungo che ogni controllo non ha un nome significativo ma quello di default, con il progressivo.

    In definitiva, il codice va rifattorizzato per essere leggibile, i nomi cambiati, la validazione inserita come indicato sopra, la conversione in numerico fatta come si deve e dopo questi step si può parlare di "business logic" e calcoli più complessi, prima assolutamente no (a mio parere).

    Ciao!
  • Re: Formato della stringa di input non corretto.

    Ok grazie. Devo studiare ancora....
  • Re: Formato della stringa di input non corretto.

    Leggi attentamente quanto esposto da Alka. Prova e capisci come funziona il programma che ti ho postato per l'uso di TryParse, ti avevo anche detto in tutte le salse di usare il TAG CODE: tastino rappresentato da [</>], ma non lo hai mai usato, se non avevi capito casa fosse, perché e non hai chiesto?

    Sorvolare su quello che non si capisce non ti porterà a padroneggiare un linguaggio.

    nelle righe:
    
                s = Convert.ToDecimal(label19.Text) + Convert.ToDecimal(label20.Text) + Convert.ToDecimal(label21.Text) + Convert.ToDecimal(label22.Text);
    
                z = Convert.ToDecimal(label23.Text) + Convert.ToDecimal(label24.Text) + Convert.ToDecimal(label25.Text) + Convert.ToDecimal(label26.Text);
    
                a = Convert.ToDecimal(label28.Text) + Convert.ToDecimal(label51.Text) + Convert.ToDecimal(label17.Text) + Convert.ToDecimal(label19.Text);
    
    hai l'errore quando le label sono vuote (non valorizzate).

    se è obbligatorio che una delle checkbok sia ceccata, perché non ne cecchi una di default?
    
            public Trasporto()
            {
                InitializeComponent();
                checkGed.Checked = true;
            }
    
    poi il codice:
            private void checkGed_CheckedChanged(object sender, EventArgs e)
            {
                if (checkGed.CheckState == CheckState.Checked)
                    checkSBYS.CheckState = CheckState.Unchecked;
            }
            private void checkSBYS_CheckedChanged(object sender, EventArgs e)
            {
                if (checkSBYS.CheckState == CheckState.Checked)
                    checkGed.CheckState = CheckState.Unchecked;
            }
    farà in modo che il check si scambi. Oppure usa i RadioButton che lo fa in automatico.

    in questa porzione di codice:
    
                if (textBox1.Text == "")
                {
                    azzera(label28.Text, label19.Text, label23.Text);
                }
                if (textBox2.Text == "")
                {
                    azzera(label51.Text, label20.Text, label24.Text);
                }
                if (textBox3.Text == "")
                {
                    azzera(label17.Text, label21.Text, label25.Text);
                }
                if (textBox4.Text == "")
                {
                    azzera(label19.Text, label22.Text, label26.Text);
                }
    
    quando le textbox 1 2 3 o 4 sono vuote, richiami la routine azzera:
    
           private string azzera(string a, string b, string c)
            {
                a = "0";
                b = "0";
                c = "0";
                return a + b + c;
            }
    
    a cosa serve? indipendentemente dal contenuto di a b e c, ritorni sempre "000" che poi non usi.

    qui:
    
                    //Rete o materasso singolo
                    if (textBox1.Text == "") label28.Text = null;
                    else
                    {
                        label28.Text = Convert.ToString(v);
                        label19.Text = Convert.ToString(5.00);
                        label23.Text = Convert.ToString(10.00);
                        
                    }
                    //Rete o materasso matrimoniale o 1 piazza e 1/2
                    if (textBox2.Text == "") label51.Text = null;
                    else
                    {
                        label51.Text = Convert.ToString(v * 2);
                        label20.Text = Convert.ToString(10.00);
                        label24.Text = Convert.ToString(20.00);
                    }
                    //Elettrodomestico
                    if (textBox3.Text == "") label17.Text = null;
    
    controlli se le textbox sono vuote, e se lo sono svuoti le label, poi continui allegramente con l'esecuzione del codice facendo conversioni sulle label che hai svuotato.

    la porzione di codice:
    
            private void clear2()
            {
                label28.Text = "";
                label51.Text = "";
                label17.Text = "";
                label19.Text = "";
                label25.Text = "";
                label19.Text = "";
                label20.Text = "";
                label21.Text = "";
                label22.Text = "";
                label23.Text = "";
                label24.Text = "";
                label25.Text = ""; // doppia cancellazione
                label26.Text = "";
                label27.Text = "";
                label28.Text = ""; // doppia cancellazione
                label51.Text = ""; // doppia cancellazione
            }
    
    anche se ininfluente, denota che non presti attenzione.

    Mettre il Tray nel codice anche dove non serve, ti maschera tutti gli errori, non facendoti capire dove il codice non funziona.
  • Re: Formato della stringa di input non corretto.

    Ancora grazie per ora!!
  • Re: Formato della stringa di input non corretto.

    Ho inserito i radioButton, adesso non funziona tutto il programma. Non effettua nessun calcolo a prescindere dal chek. Sembra come se ci fosse un bug che non mi permette più di utilizzare il programma. Inizialmente non mi dava problemi neanche quando le due check erano tutte e due non spuntate. Funzionava alla perfezione. Ho preso il programma originale da un hardDisck, ma a quanto pare quando lo riavvio il debug prende in considerazione l'ultimo programma che ho cancellato(quello con i radiobutton)
  • Re: Formato della stringa di input non corretto.

    Posta tutto il codice
    Posta tutto il designer, lo trovi sulla finestra a destra "Esplora soluzioni"
    si chiama Trasporto.designer.cs oppure Form1.Designer.cs, comunque finisce con .Designer.cs
    Questa sera te lo correggo con tutte le indicazioni.
  • Re: Formato della stringa di input non corretto.

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

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

    Infinite grazie comunque. Se riesci comunque a farmi capire dove ho sbagliato per me è un ulteriore piacere.
  • Re: Formato della stringa di input non corretto.

    È mia intenzione di far correggere a te il programma, dandoti indicazioni.
    Il programma serve per evitare lungaggini sull'interpretazione dei problemi che riscontri.
    Di ogni form devi postare anche i rispettivi designer.cs
  • Re: Formato della stringa di input non corretto.

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

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

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

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

    #####
Devi accedere o registrarti per scrivere nel forum
48 risposte