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.