C# berechnung in einem string

EfreakZ

Cadet 1st Year
Registriert
Jan. 2013
Beiträge
11
Hallo zusammen,

ich habe folgendes Problem:

Wie bekomme ich meine Berechnungen (cross,hantel,whey usw...) in meinen string Summe rein? So wie es im Code zu sehen ist sollte es funktionieren, macht es aber nicht so wie ich das will. Der Teil der nicht funktioniert soll den Einzelpreis mit der vom User eingegebenen Anzahl multiplizieren.

Code:
        public void button2_Click(object sender, EventArgs e)
        {
            Warenkorb ware = new Warenkorb();
            if (checkBox1.Checked == true || checkBox2.Checked == true || checkBox3.Checked == true || checkBox4.Checked == true || checkBox5.Checked == true || checkBox6.Checked == true || checkBox7.Checked == true)
            {
                string Artikel = ((checkBox1.Checked) ? "Crosstrainer\n" : string.Empty) +
                    ((checkBox2.Checked) ? "Hantelset\n" : string.Empty) +
                    ((checkBox3.Checked) ? "Whey Protein 500g\n" : string.Empty) +
                    ((checkBox4.Checked) ? "Creatin\n" : string.Empty) +
                    ((checkBox5.Checked) ? "Trainingshandschuhe\n" : string.Empty) +
                    ((checkBox6.Checked) ? "Handtuch\n" : string.Empty) +
                    ((checkBox7.Checked) ? "Gymnastikball\n" : string.Empty);

                string Artikelnr = ((checkBox1.Checked) ? "012001\n" : string.Empty) +
                    ((checkBox2.Checked) ? "454454\n" : string.Empty) +
                    ((checkBox3.Checked) ? "654897\n" : string.Empty) +
                    ((checkBox4.Checked) ? "223321\n" : string.Empty) +
                    ((checkBox5.Checked) ? "332565\n" : string.Empty) +
                    ((checkBox6.Checked) ? "777788\n" : string.Empty) +
                    ((checkBox7.Checked) ? "552566\n" : string.Empty);

                string Einzelpr = ((checkBox1.Checked) ? "299,00€\n" : string.Empty) +
                    ((checkBox2.Checked) ? "84,98€\n" : string.Empty) +
                    ((checkBox3.Checked) ? "9,95€\n" : string.Empty) +
                    ((checkBox4.Checked) ? "19,99€\n" : string.Empty) +
                    ((checkBox5.Checked) ? "7,99€\n" : string.Empty) +
                    ((checkBox6.Checked) ? "12,95€\n" : string.Empty) +
                    ((checkBox7.Checked) ? "14,99€\n" : string.Empty);

                string Anzahl = ((checkBox1.Checked) ? textBox1.Text + "\n" : string.Empty) +
                    ((checkBox2.Checked) ? textBox2.Text + "\n" : string.Empty) +
                    ((checkBox3.Checked) ? textBox3.Text + "\n" : string.Empty) +
                    ((checkBox4.Checked) ? textBox4.Text + "\n" : string.Empty) +
                    ((checkBox5.Checked) ? textBox5.Text + "\n" : string.Empty) +
                    ((checkBox6.Checked) ? textBox6.Text + "\n" : string.Empty) +
                    ((checkBox7.Checked) ? textBox7.Text + "\n" : string.Empty);
                
         // von hier bis  ware.f = Summe; geht nicht    
    
                double labelcross;
                double textboxcross;
                double cross;
                labelcross = double.Parse(label20.Text);
                textboxcross = double.Parse(textBox1.Text);
                cross = labelcross * textboxcross;
   
                double labelhantel;
                double textboxhantel;
                double hantel;
                labelhantel = double.Parse(label21.Text);
                textboxhantel = double.Parse(textBox2.Text);
                hantel = labelhantel * textboxhantel;
    
                double labelwhey;
                double textboxwhey;
                double whey;
                labelwhey = double.Parse(label22.Text);
                textboxwhey = double.Parse(textBox3.Text);
                whey = labelwhey * textboxwhey;
    
                double labelcrea;
                double textboxcrea;
                double crea;
                labelcrea = double.Parse(label23.Text);
                textboxcrea = double.Parse(textBox4.Text);
                crea = labelcrea * textboxcrea;
    
                double labelhands;
                double textboxhands;
                double hands;
                labelhands = double.Parse(label24.Text);
                textboxhands = double.Parse(textBox5.Text);
                hands = labelhands * textboxhands;
    
                double labelhandtuch;
                double textboxhandtuch;
                double handtuch;
                labelhandtuch = double.Parse(label25.Text);
                textboxhandtuch = double.Parse(textBox6.Text);
                handtuch = labelhandtuch * textboxhandtuch;
    
                double labelGymball;
                double textboxGymball;
                double Gymball;
                labelGymball = double.Parse(label26.Text);
                textboxGymball = double.Parse(textBox7.Text);
                Gymball = labelGymball * textboxGymball;

                string Summe = ((checkBox1.Checked) ? cross + "€\n" : string.Empty) +
                    ((checkBox2.Checked) ? hantel + "€\n" : string.Empty) +
                    ((checkBox3.Checked) ? whey + "€\n" : string.Empty) +
                    ((checkBox4.Checked) ? crea + "€\n" : string.Empty) +
                    ((checkBox5.Checked) ? hands + "€\n" : string.Empty) +
                    ((checkBox6.Checked) ? handtuch + "€\n" : string.Empty) +
                    ((checkBox7.Checked) ? Gymball + "€\n" : string.Empty);

                    ware.a = Artikel;
                    ware.b = Artikelnr;
                    ware.c = Einzelpr;
                    ware.d = Anzahl;
                    ware.f = Summe;
                    ware.Show();
                    Hide();
                
            }
            else
            {
                MessageBox.Show("Sie müssen wenigstens eine Sache ausgewählt\nhaben um diese Funktion nutzen zu    können!");
            }
        }

Bitte um Hilfe

Gruß EfreakZ
 
Mal auf die Schnelle: Du solltest die Summe erstmal als double berechnen.
Zur Übersicht würde ich auch die Berechnung der Einzelposten etwas anders aufbauen, e.g.:

Code:
double labelcrea;
double textboxcrea;
double crea=0.0;
labelcrea = double.Parse(label23.Text);
textboxcrea = double.Parse(textBox4.Text);
if (checkBox4.Checked)
    crea = labelcrea * textboxcrea;

und dann einfach:

Code:
double summe=hantel+whey+crea+...

string sSumme=String.Format("{0:00} €\n",summe);

(alles ungetestet ;)).

Grüsse,

T.
 
Bei Funktionsaufrufen wie double.parse versucht das System auf alle möglichen Arten doch noch in eine Double Zahl zu konvertieren. Beim Boxing kannst du eher eine Exception erhalten. Du bekommst außerdem bei den Parse Methoden Rückgabe werte, ob die Wandlung erfolgreich war oder nicht.

Von daher ist sein vorgehen schon besser, aber noch nicht gut.

@TE: Du hast ein Debugger, setzt halt nen Breakpoint, da wo es harkt und schau die den Wert der Variablen an.
 
Könntest du kurz erklären was du eigentlich mit dem Programm erreichen willst? Ein Screenshot der Gui wäre schön dann kann ich dir vielleicht weiterhelfen :)

Deine Warenkorb-Klasse ist ebenfalls sehr schwierig zu verstehen, ware.a ware.b ware.c... :) ??
 
Die Antwort ist bereits in der Frage enthalten: Summe = Zahl != String.
Willst du rechnen nimm dementsprechend einen Datentyp wie int oder double etc.

Außerdem solltest du bei immer wiederkehrenden "Mustern" wie bei

Code:
...
                double labelcrea;
                double textboxcrea;
                double crea;
                labelcrea = double.Parse(label23.Text);
                textboxcrea = double.Parse(textBox4.Text);
                crea = labelcrea * textboxcrea;
    
                double labelhands;
                double textboxhands;
                double hands;
                labelhands = double.Parse(label24.Text);
                textboxhands = double.Parse(textBox5.Text);
                hands = labelhands * textboxhands;
...

dir überlegen dass man das kürzen oder auslagern kann...
Etwa:

double hands = double.Parse(label24.Text) +double.Parse(textBox5.Text);

die Zeit die du hier sparst steckst du dann in die griffige Benennung der Controls ;)
 
@ M4rc0

Ich programmiere einen Shop (der niemals online gehen wird und nur ein kleiner Teil des Gesammten Programmes ist). Der Kunde kann Waren auswählen und bestellen. Als erstes kommt der Shop, auf dem ist ein Button der die ausgewählten Sachen in den Warenkorb packt und man letztendlich die Versandart auswählen kann und dann bestellen. Um von einer From (Shop) in die andere Form (Warenkorb) etwas zu schreiben, benötige ich globale variablen, darum dieses ware.a, ware.b ... . Die strings Artikel, Artikelnr, Einzelpr und Anzahl funktionieren ja, nur halt der string mit der Berechnung noch nicht. Bei der Ware die der Kunde ausgewählt hat, kann er noch die anzahl bestimmt ( zB. 2x Handtuch, 3x Trainingshandschuhe ), dann soll das Programm für jeden Artikel die Summe errechnen und ausgeben --> ware.f = Summe; ( zB. 2x Handtuch = 12,95€ * 2 = 25,90€ und 3x Trainingshandschuhe = 7,99€ * 2 = 15,98€). Hab es immer noch nicht hinbekommen. shop.pngwarenkorb.png
Ergänzung ()

Ich habe nochmal nachgeschaut und wenn ich im Shop überall einhäkchen reinmache (crosstrainer,handtuch usw) dann funktioniert es genau so wie ich es haben will:so hier.png doch lass ich nur einen Haken im Shop weg, kommt ein Fehler:fehler.png warum ist das auf einmal ein falsches Format??? Eben ging es doch.
Ergänzung ()

Das ist mir jetzt echt peinlich. Aber ich habe vergessen in die Textboxen im Shop einen Wert einzutragen:evillol: Logisch wenn nichts in der Textbox drin steht (auch keine 0) kommt ein Fehler. Er kann ja nicht mit "nichts" multiplizieren. Ohje:freak:

Trotzdem danke für eure Tipps
 
Nur so grundsätzlich, gehe immer davon aus, dass der Anwender dumm ist :evillol: und so wäre int.TryParse der entspannter Weg und es sollten vor allem keine exceptions mehr geworfen werden. Es wäre natürlich auch möglich die exception abzufangen, das würde ein bisschen Platz sparen, finde ich persönlich aber irgendwie nicht elegant :).

Ich glaube, wenn du noch ein bisschen daran Spaß haben willst, solltest du dir unbedingt mal Klassen anschauen, viel Spaß und erfolg ;).

#EDIT: Am besten aber, den User eine falsch Eingabe gar nicht durchgehen lassen!
 
Zuletzt bearbeitet:
Zurück
Oben