2017-09-22 1 views
-1

Ich mache diesen Rechner mit System.Windows.Forms und jedes Mal, wenn ich versuche, eine Quadratwurzel, Cos, Sin oder Tan-Operation und drücken Sie die Equals-Taste stoppt es und sagt mir 'System.FormatException: Eingabe String war nicht in ein richtiges Format 'und ich weiß nicht warum.Warum gibt dieser Rechner mir 'Input String war nicht im richtigen Format' Fehler?

Das ist mein buttonEquals_Click Veranstaltung:

private void buttonEquals_Click(object sender, EventArgs e) 
{ 
    double num2; 
    double answer; 

    num2 = double.Parse(textBoxResult.Text); 

    switch (theOperator) 
    { 
     case "+": 
      answer = resultValue + num2; 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     case "-": 
      answer = resultValue - num2; 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     case "×": 
      answer = resultValue * num2; 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     case "÷": 
      answer = resultValue/num2; 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     case "sqrt": 
      answer = Math.Sqrt(resultValue); 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     case "exp": 
      answer = Math.Pow(resultValue, num2); 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     case "sin": 
      answer = Math.Sin(resultValue); 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     case "cos": 
      answer = Math.Cos(resultValue); 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     case "tan": 
      answer = Math.Tan(resultValue); 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     default: 
      answer = 0; 
      break; 
    } 
} 

und das ist mein SqrtButton_Click Ereignis und DivisionButton_event (so können Sie mit DivisionButton sehen, dass es funktioniert):

private void SqrtButton_Click(object sender, EventArgs e) 
{ 
    resultValue = resultValue + double.Parse(textBoxResult.Text); 
    theOperator = "sqrt"; 
    textBoxResult.Clear(); 
} 

private void DivisionButton_Click(object sender, EventArgs e) 
{ 
    resultValue = resultValue + double.Parse(textBoxResult.Text); 
    theOperator = "÷"; 
    textBoxResult.Clear(); 
} 

ich jede schätzen würde Hilfe.

EDIT: Die Ausnahme ist trown an: num2 = double.Parse(textBoxResult.Text);

+0

Was bedeutet das Debugger sagen Ihnen, wenn Sie einen Breakpoint in 'SqrtButtonClick' setzen? Ist der Wert angemessen, um an "double.Parse" zu übergeben? Wie sieht es mit dem 'case' für' "sqrt" 'aus, wenn Sie' resultValue' untersuchen? Ist der Wert, der zur Übergabe an die Funktion 'sqrt' passen würde? –

+0

Jetzt haben Sie Ihre Antwort. * Ungültige Eingabezeichenfolge * –

+0

Es kommt nicht zur nächsten Zeile. Es stoppt bei 'num2 = double.Parse (textBoxResult.Text);' aber wenn ich den Breakpoint in den 'case' für Division platziere, wird der Fall eingegeben. –

Antwort

3

gehend vermuten, dass, wenn Sie versuchen, die Jungs zu testen, die textBoxResult leer. Beachten Sie, dass Sie die Zeile ausführen num2 = double.Parse(textBoxResult.Text); Wenn textBoxResult vor kurzem gelöscht wurde, dann hätten Sie hier ein Problem des Formulars System.FormatException : Input string was not in a correct format (eine leere Zeichenfolge/Null wird nicht von double.Parse als 0.00 analysiert)

+0

Danke Mann, ich habe die 'textBoxResult.Clear()' aus Sqrt, Cos, Sin und Tan entfernt und es hat funktioniert! Ich schätze Ihre Hilfe. –

+0

Ich habe mich gefragt, wer diese Antwort abgelehnt hat! –

+0

Ich habe nicht abgestimmt, aber ich würde vermuten, dass eine Down-Abstimmung aufgrund der Tatsache, dass dies erklärt, warum * der Fehler auftritt, aber nicht * wie man es verhindern * (dh einige Diskussion von 'double.TryParse () 'und/oder zuerst die Eigenschaft' Text' validieren. –

Verwandte Themen