Gurki Geschrieben 25. Juni 2011 Geschrieben 25. Juni 2011 allo, warum ist es so kompliziert Textboxeingaben zu berechnen? Also mal angenommen ich habe 2 Textboxen (Textbox1 & Textbox2). Dort gebe ich jeweils eine 5 ein und möchte diese Eingabe dann berechnet haben und in einem Lable ausgegeben bekommen. Ich komme von VB.Net und dort war es ganz einfach so: Label1.Text = Textbox1.Text + Textbox2.Text Warum muss man das bei C# so kompliziert machen mit "int.parse"?? Label1.Text = (int.Parse(Textbox1.Text) + (int.Parse(Textbox2.Text) * (decimal.Parse(Textbox3.Text)))).ToString(); Und was ist wenn im String Zahlen bzw. Buchstaben vorhanden sind?? So stürzt es dann ab... Zitieren
SilentDemise Geschrieben 25. Juni 2011 Geschrieben 25. Juni 2011 Warum es in VB so einfach ist? Weil VB untypisierten Schwachfug erlaubt. Das was du also als angenehm in VB empfindest ist eine der großen Problem von VB. C# ist eine streng typisierte Sprache. Um herauszufinden, ob die Umwandlung in ein Integer möglich ist gibt es die TryParse Funktion. Zitieren
Sky.NET Geschrieben 25. Juni 2011 Geschrieben 25. Juni 2011 Und was ist wenn im String Zahlen bzw. Buchstaben vorhanden sind?? So stürzt es dann ab... Abstürzen sollte dein Programm ja schonmal garnicht xD Der User bekommt einfach ne Meldung was er Falsch gemacht hat, hab dir mal nen Beispielcode gemacht: int a = 0, b = 0; int.TryParse(tbxZahl1.Text, out a); int.TryParse(tbxZahl2.Text, out ; if (a != 0 && b != 0) tbxErg.Text = (a + .ToString(); else MessageBox.Show("Bitte überprüfen sie ihre Eingabe (Nur Zahlen erlaubt)");[/code] So bekommt der User wenigstens mitgeteilt, dass er etwas falsch gemacht hat =D. Wenn da natürlich 0 steht bekommt er trotzdem eine Fehlermeldung, ist also nicht ganz wasserdicht mein Beispiel, sonst muss man halt die Textboxen noch prüfen ob irgendwo 0 steht, ich kenne aber Niemanden der irgendwas mit 0 addieren will xD. Zitieren
realgun Geschrieben 25. Juni 2011 Geschrieben 25. Juni 2011 Naja, die XXX.TryParse Methoden haben auch einen Rückgabewert... Zitieren
Sky.NET Geschrieben 25. Juni 2011 Geschrieben 25. Juni 2011 Naja, die XXX.TryParse Methoden haben auch einen Rückgabewert... ******e xD ich benutze die so selten, natürlich lol, dann müsste der Code so aussehen: int a = 0, b = 0; if (int.TryParse(tbxZahl1.Text, out a) && int.TryParse(tbxZahl2.Text, out ) tbxErg.Text = (a + .ToString(); else MessageBox.Show("Bitte überprüfen sie ihre Eingabe (Nur Zahlen erlaubt)");[/code] Sorry für den Fehler xD Zitieren
SilentDemise Geschrieben 26. Juni 2011 Geschrieben 26. Juni 2011 Ich hoffe bei deiner Berichtsheftsoftware wird besser validiert Oo Hier mal ein Snippet mit Validierung: private void button1_Click(object sender, EventArgs e) { int box1; int box2; //Regex -> nur Zahlen gültig var myRegex = new Regex("^[0-9]*$"); //Textbox 1 auswerten if(textBox1.Text.Equals(String.Empty) || !myRegex.IsMatch(textBox1.Text)) { MessageBox.Show(@"Textbox1 ist leer oder ungültig gefüllt."); return; } else { box1 = int.Parse(textBox1.Text); } //Textbox 2 auswerten if (textBox2.Text.Equals(String.Empty) || !myRegex.IsMatch(textBox2.Text)) { MessageBox.Show(@"Textbox2 ist leer oder ungültig gefüllt."); return; } else { box2 = int.Parse(textBox2.Text); } //Berechnung label1.Text = (box1 + box2).ToString(); } Zitieren
Sky.NET Geschrieben 26. Juni 2011 Geschrieben 26. Juni 2011 Ich hoffe bei deiner Berichtsheftsoftware wird besser validiert Oo Genau sowas überprüfe ich abschließend nochmal im Review, wobei ich meist drauf achte das der User ohnehin nur Strings eingeben kann, da muss ich nichts validieren, beispielsweise die Arbeitszeit ist gleich in nem NumericUpDown, da kann der User sich die Finger wundtippen beim Versuch nen String da reinzuschreiben, sowas spart Fehlerquellen. Daher kommt es auch, dass ich tryparse nicht benutze, ich packe das Übel an der Wurzel =D. RegEx benutze ich nur an einer Stelle, und zwar da, wo der User eine URL eingeben kann =). Zitieren
SilentDemise Geschrieben 26. Juni 2011 Geschrieben 26. Juni 2011 Prinzipiell könnte man die Validierung auch nochmal in eine Methode packen. Aber ich denke, das Prinzip ist klar :-) @Sky warum solltest du strings nicht validieren müssen? oO Und Arbeitszeit wird dann ein sehr großes Drop Down ;-) Zitieren
Sky.NET Geschrieben 26. Juni 2011 Geschrieben 26. Juni 2011 Arbeitszeit ist kein DropDown, es ist ein NumericUpDown, du hast 2 Pfeiltasten nach oben und unten, den in/dekrement-wert pro klick kann man selbst festlegen, ausserdem kann man die Zahl manuell eintippen, aber eben keine Buchstaben. Ich hab heut morgen noch geschlafen glaub ich... Strings muss man (meist) auch validieren, sicher, beispielsweise muss ich das tun weil ich da keine SQL-Befehle unescaped drin haben darf. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.