C# Wenn Textbox leer dann Null einsetzten und damit Rechnen

Surebetrechner - (programmieren, Rechner, Anfänger)

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Mit

tbxQuote3.Text = null;

löschst du die Variable, du sagst also, sie hat keinen Inhalt.

Benutze mal

tbxQuote3.Text = "0";

und schau ob es funktioniert.

Ausserdem musst du die Abfrage vor der Rechnung einfügen, so dass es schlussendlich so aussieht:

private void button1_Click(object sender, EventArgs e)
{
    if (tbxQuote3.Text == "" )
    { 
        tbxQuote3.Text = "0";
    }

    double QuotenWette = 
        (1/Convert.ToDouble(tbxQoute1.Text)) + 
        (1/Convert.ToDouble(tbxQuote2.Text)) + 
        (1 / Convert.ToDouble(tbxQuote3.Text));
    QuotenWette = Math.Round(QuotenWette, 3);

    if (QuotenWette < 1)
    {
        tbxErtrag.Text = Convert.ToString(QuotenWette);
    }
    else
    {
        tbxErtrag.Text = "Kein Surebet!";
    }
}
Stiffnex 
Fragesteller
 26.03.2014, 17:52

Ok danke hat funktioniert aber nur so als Verständisfrage

Warum muss das vor Double QuotenWette? Weil ich hatte gedacht der fragt dann erst die Textbox3 ab, setzt die 0 ein und springt dann zum nächsten If block?

0
D4V1D1998  26.03.2014, 18:45
@Stiffnex

Also die If Abfrage 1 mit der Abfrage, ob die 3. Textbox leer ist, muss vor das double QuotenWette, weil du ja als erstes überprüfen willst ob die Textbox leer ist, dann willst du mit dem Wert aus der Textbox rechnen.

Du überprüfst also mit dem Code erst einmal ob die Textbox leer ist und rechnest dann erst. Andersherum wäre es ja nicht logisch.

0

Oh, oh! Teilst du etwa wirklich durch 0? Du musst vor dem Teilen prüfen, ob der Double aus tbxQuote[1,2,3].Text !=0 , ansonsten knallt dir eine Fehlermeldung vor die Augen.

Toraka  26.03.2014, 23:45

Etwas anderes. Was, wenn der Anwender "51:;!)" eingibt? Das Convert wird damit nicht klar kommen! Peng, Fehlermeldung, oder sogar Absturz, weil keine übersehene Fehler mittels Try-Catch abgefangen werden. Entweder verhinderst du eine andere Eingabe als Ziffern, oder aber du fängst fehlerhafte Eingaben ab, indem du anstatt Convert das TryParse verwendest, was im Grunde immer besser ist...

double parsedValue = 0;

if (double.TryParse(tbx1Quote.Text, out parsedValue) == false || parsedValue == 0))
{
  MessageBoxShow("Ändern Sie Ihre Eingabe...");
}
else
{
   double quote1 = 1 / parsedValue;
}
0
Toraka  26.03.2014, 23:59

Das Ersetzen mut 0 könntest du direkt während der Eingabe, genauer, nach dem Validieren, ausführen. Deine Textboxen weisen nicht nur ein Event Click auf. Wenn du einen Doppelklick auf das Event "Validated" machst, kannst du einen Code dazu eingeben. Validation ist ein Prüfvorgang, der beim Verlassen des Controls ausgeführt wird, wenn ein Button geklickt oder in ein anderes Textfeld gewechselt wird. In diesem Event könntest du eintragen (Namen der Textbox jeweils anpassen):

if (string.IsNullOrEmpty(tbxQuote1.Text))
{
  tbxQuote1.Text = 0; 
}

Die Methode String.IsNullOrEmpty(TextBoxName.Text) empfehle ich anstatt der einfachen Prüfung auf Null. Immerhin könnten auch ein oder mehrere Leerzeichen eingegeben werden, wodurch der Text nicht mehr Null, sondern lediglich Empty wäre. Die Prüfung auf Null würde in diesem Fall nicht mehr greifen.

0
Stiffnex 
Fragesteller
 08.04.2014, 19:53
@Toraka

Also das mit der bin ich Umgangen und zwar das er mir ein Dialogfenster ausgibt und das Feld dann leer lässt. Ist mir dann auch aufgefallen und ich hab mich selbst gefragt ob ich dumm bin =D Aber das mit dem Text daran hab ich auch gedacht und deshalb danke für den Hinweis ich hab da schon ne weile rum probiert.

0