Benutzer mit den meisten Antworten
FormatException

Frage
-
Moin. Ich hab ein kleines Programm erstellt, das einfache Addition durch 2 Textboxen ausführt.
Wenn man in eines der Textboxen etwas eingibt, das keine Zahl ist (hab TextChanged abboniert), kommt bedauernstwerterweise ein FormatException. Ich frage mich, wie ich sowas mit try und catch beseitigen kann. Ich stelle mir das so vor: kommt eine FormatException vor, wird die Rechnung gestoppt und der Label des StatusStrips links unten bekommt eine Anzeige namens "Bitte geben sie eine Zahl ein".
Wie mache ich das? Oder besser: kann man eine Textbox irgendwie so programmieren, dass sie nur Zahlen zulässt?
Vielen Dank im Voraus!
Antworten
-
Hallo,
das sinnvollste ist es die Eingabe über die TryParse Methoden in eine Zahl umzuwandeln,
z. B. via Decimal.TryParse - wobei die Methode auch für die anderen Zahlendatentypen existiert:decimal value1, value2; decimal result; try { if (decimal.TryParse(this.textBox1.Text, out value1)) { if (decimal.TryParse(this.textBox2.Text, out value2)) { // Ausrechnen... result = value1 + value2; } else { MessageBox.Show(this, "Geben Sie bitte eine zweite Zahl ein."); } } else { MessageBox.Show(this, "Geben Sie bitte eine Zahl ein."); } } catch (Exception ex) { // Überlauf uam. MessageBox.Show(this, "Fehler beim Berechnen.\n" + ex.Message); }
Gruß Elmar- Als Antwort markiert Gametex Freitag, 3. August 2012 17:21
Alle Antworten
-
Hallo,
das sinnvollste ist es die Eingabe über die TryParse Methoden in eine Zahl umzuwandeln,
z. B. via Decimal.TryParse - wobei die Methode auch für die anderen Zahlendatentypen existiert:decimal value1, value2; decimal result; try { if (decimal.TryParse(this.textBox1.Text, out value1)) { if (decimal.TryParse(this.textBox2.Text, out value2)) { // Ausrechnen... result = value1 + value2; } else { MessageBox.Show(this, "Geben Sie bitte eine zweite Zahl ein."); } } else { MessageBox.Show(this, "Geben Sie bitte eine Zahl ein."); } } catch (Exception ex) { // Überlauf uam. MessageBox.Show(this, "Fehler beim Berechnen.\n" + ex.Message); }
Gruß Elmar- Als Antwort markiert Gametex Freitag, 3. August 2012 17:21
-
Hi,
wo ist der Code, der die Exception auslöst? Von alleine passiert das nicht. An der Stelle musst Du ansetzen und bspw. über Try ... Catch bzw. auch über die Rückgabe von Int64.TryParse( ... ) erkennen, ob die Umwandlung in eine Zahl erfolgreich war. In dem Moment kannst Du auch dein Label aktualisieren.
Für TextBoxen, die nur Zahlen zulassen, siehe:
http://www.hinzberg.net/csharp/csharp/csharp/numtextbox.html
http://msdn.microsoft.com/de-de/library/ms229644.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Danke!
Ich habe das Try-Catch nun eingefügt:
catch (Exception ex) { // exception status.Text = "Error. " + ex.Message; status.ForeColor = System.Drawing.Color.Red; }
Der Label "status" zeigt jetzt immer Error an und wird rot, wenn ich im Textfeld was anderes als eine Nummer eingebe. Soweit, so gut.
Aber wenn ich im Textfeld wieder eine Nummer eingebe, bleibt bei "status" der Text und die Farbe weiterhin angezeigt.
Gibt es sowas wie eine Schleife, die automatisch nach beenden der Exception "status" zurücksetzt?
-
Hallo,
wenn keine Ausnahme eintritt, so gibt es dafür kein speziellen Block - deswegen auch Ausnahme ;-)
Solche Dinge führt man am Ende des try Blocks aus, wenn man mit keinem Fehler mehr rechnen muss.
Für mein Beispiel würde man nach dem Ausrechnen den Status auf leer und die Farbe einstellen:... // Ausrechnen... result = value1 + value2; // Wenn nichts mehr schief gehen kann... status.Text = ""; status.ForeColor = System.Drawing.Color.Black; ...
was Du entsprechend für Deinen Code anpassen müsstest.
Gruß Elmar