Frage von datensammler, 27

Exception C# nicht weiter gehen?

Hallo Zusammen

Ich möchte, wenn jemand einen Buchstaben eingibt, dass es eine Exception wirft. Nun geht er mir in das catch was richtig wäre.

Ich möchte aber das man danach die Anzahlmaenner wie frauen nochmals eingeben kann, bei mir geht er nach dem catch im code weiter und hat dann Logischerweise nur noch 0 drin.. Kann mir jemand weiterhelfen?

            try
            {

                Anzahlmaenner = Convert.ToInt32(AnzahlmaennerBox.Text);
                Anzahlfrauen = Convert.ToInt32(AnzahlfrauenBox.Text);


            }

            catch (FormatException)
            {
                Anzahlmaennerl.ForeColor = System.Drawing.Color.Red; //Färbt label rot
                Anzahlfrauenl.ForeColor = System.Drawing.Color.Red;
                AnzahlmaennerBox.Text = "";    //Setzt Textbox auf " " 
                AnzahlfrauenBox.Text = "";
            }
Antwort
von Unsinkable2, 6

bei mir geht er nach dem catch im code weiter

Das ist auch der Sinn der Sache. Das "catch" (= "Auffangen, Einfangen") soll einspringen, wenn ein Fehler auftritt. Dort soll dann die "Fehler-Behandlung" erfolgen, also alles getan werden, damit der Fehler weggeht. 

Und danach geht's weiter im Text...

Ich möchte aber das man danach die Anzahlmaenner wie frauen nochmals eingeben kann

Es gibt unzählige Wege, das zu erreichen. Der einfachste ist wohl für dich, wenn du eine Prüfungs-Variable nutzt.

bool ist_Fehler = true; // pessimistische Probe, wir gehen davon aus, dass der Benutzer Fehler macht
try
{

Anzahlmaenner = Convert.ToInt32(AnzahlmaennerBox.Text);
Anzahlfrauen = Convert.ToInt32(AnzahlfrauenBox.Text);

ist_Fehler = false; // Probe bestanden, kein Fehler aufgetreten
}

catch (FormatException)
{
Anzahlmaennerl.ForeColor = System.Drawing.Color.Red; //Färbt label rot
Anzahlfrauenl.ForeColor = System.Drawing.Color.Red;
AnzahlmaennerBox.Text = ""; //Setzt Textbox auf " "
AnzahlfrauenBox.Text = "";
ist_Fehler = true; // dient nur dem Verständnis des Programmierers, ist voreingestellt. }
if (ist_Fehler == true)
{
  return;
}

// Alles, was hier steht, 
// wird nur ausgeführt,
// wenn "try" komplett durchlaufen wird.
// also: wenn gar kein(!) Fehler passiert.
// Achtung: OverflowException wird nicht abgefangen!


Das ist zwar "schlechtes Design", weil die Faustregel lautet: Eine Methode = eine Aufgabe. Aber es ist am einfachsten und übersichtlichsten, weil es keine größeren Änderungen am Code erfordert.

Besseres Design wäre es beispielsweise, mehrere try-catch-Blöcke zu kaskadieren (also ineinander zu verschachteln), um so die Fehlerbehandlung zu optimieren.

Antwort
von EightSix, 21

Pack das ganze in eine Schleife die so lange läuft bis es nicht mehr 0 ist.

Man sollte aber Validierungen nicht mittels Exceptions machen. int.TryParse() eignet sich hervorragend um zu überprüfen ob der Wert in einen int konvertiert werden konnte.

Kommentar von PWolff ,

Und statt eines Textfeldes kann man besser ein NumericUpDown nehmen, da kann der Wert nicht nichtnumerisch sein.

Kommentar von CrystalixXx ,

Eine NumericTextBox hat doch sicherlich schon jeder einmal programmiert. Ist ja nicht so schwierig.

Kommentar von Unsinkable2 ,

Eine NumericTextBox hat doch sicherlich schon jeder einmal programmiert. Ist ja nicht so schwierig.

Nun, es ist nicht schwieriger, als "Guten Tag" zu schreiben. Und es geht deutlich schneller, als deinen Kommentar zu formulieren und hier abzusenden ;).

Guckst du hier: https://goo.gl/3FCPoJ (Ganz unten stehen Beispiele.)

Kommentar von CrystalixXx ,

Das hat PWolff schon lange vor dir erwähnt. Ging mir im Grunde auch nicht um das NumericUpDown-Element.

Keine passende Antwort gefunden?

Fragen Sie die Community