2016-08-25 9 views
1

Hier ist der Code:Eingabezeichenfolge war nicht in einem korrekten Format Fehler

public void calculations() 
{ 
    int value; 
    try 
    { 
     if ((string.IsNullOrEmpty(txtrate.Text)) || (string.IsNullOrEmpty(txttotalkm.Text))) 
     { 
      MessageBox.Show("Fill both the Values", "Try Again", MessageBoxButtons.OK, MessageBoxIcon.Information); 
     } 
     else if ((int.TryParse(txtrate.Text, out value)) && (int.TryParse(txttotalkm.Text, out value))) 
     { 
      int rate = int.Parse(txtrate.Text.Trim()); 
      int km = int.Parse(txttotalkm.Text.Trim()); 

      decimal gross = rate * km; 
      decimal NBT = (gross * 8/100); 
      decimal vat = ((gross + NBT) * 11/100); 
      decimal total = vat + NBT + gross; 

      string snbt = String.Format("{0:Rs 0.00}", NBT); 
      string svat = String.Format("{0:Rs 0.00}", vat); 
      string stotal = String.Format("{0:Rs 0.00}", total); 

      lblnbt.Visible = true; 
      lblnbt.Text = snbt; 
      lblvat.Visible = true; 
      lblvat.Text = svat; 

      lbltotal.Visible = true; 
      lbltotal.Text = stotal; 
      string ltnbt = lblnbt.Text.ToString(); 
      string ltvat = lblvat.Text.ToString(); 
      string lttotal = lbltotal.Text.ToString(); 

      int inbt = Convert.ToInt32(lblnbt.Text); 
      int ivat = Convert.ToInt32(lblvat.Text); 
      int itotal = Convert.ToInt32(lbltotal.Text); 

      //CreateWordDocument(@"C:\temp\test.docx", 
      //   @"C:\temp\new.docx"); 
      clear(); 
     } 
     else 
     { 
      MessageBox.Show("Wrong Values Please Check again", "Try Again", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      clear(); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

Wenn das Programm läuft, heißt es:

Eingabezeichenfolge war nicht in einem korrekten Format Fehler

Ich muss sagen, ich versuche nur zu programmieren und zu lernen, kein Profi, ich kann das Problem einfach nicht herausfinden.

Versucht das try...catch Box zu entfernen und die Ausnahme sehen es heißt dies:

The Exception That Jumped out

Wenn es einen einfacheren Weg, dies zu tun, lass es mich wissen.

+0

Auf welcher Linie erhalten Sie die Ausnahme? –

+0

Der "int.Parse", der das Problem verursacht, verwendet stattdessen "int.TryParse". Hoffen Sie, dass Sie die 'Nth' Person sind, die diese Frage –

+0

@diiN_ @ int ivat = Convert.ToInt32 (lblvat.Text); – Binku

Antwort

1

Der Fehler ist hier:

//snbt, svat and stotal are not valid integers, because they 
//are text formatted that start with "Rs"... 
string snbt = String.Format("{0:Rs 0.00}", NBT); 
string svat = String.Format("{0:Rs 0.00}", vat); 
string stotal = String.Format("{0:Rs 0.00}", total); 

lblnbt.Visible = true; 
lblnbt.Text = snbt; 
lblvat.Visible = true; 
lblvat.Text = svat; 

lbltotal.Visible = true; 
lbltotal.Text = stotal; 
string ltnbt = lblnbt.Text.ToString(); 
string ltvat = lblvat.Text.ToString(); 
string lttotal = lbltotal.Text.ToString(); 

//HERE the exception is triggered, because the "text" in the 
//Labels start with "Rs". 
int inbt = Convert.ToInt32(lblnbt.Text); 
int ivat = Convert.ToInt32(lblvat.Text); 
int itotal = Convert.ToInt32(lbltotal.Text); 

Um dies zu korrigieren, anstatt wieder von den Etiketten der Umwandlung in Integer, warum NBT, Mehrwertsteuer und TOTAL nicht einfach verwenden?

Oder besser, warum müssen Sie auf Ganzzahlen von den Etiketten überhaupt zurückkonvertieren?

+0

Wie soll ich es korrigieren? 'string snbt = String.Format (" {0: Rs 0.00} ", NBT.ToString()); Zeichenfolge svat = String.Format ("{0: Rs 0.00}", vat.ToString()); string stotal = String.Format ("{0: Rs 0.00}", total.ToString()); ' so? – Binku

+0

Das Problem besteht darin, dass Sie die anzuzeigenden Werte formatieren, und dann versuchen, sie erneut von den Beschriftungen in Integer zu konvertieren. Warum tust du das? – Jauch

+0

yup mein bad sollte das jetzt nicht getan haben funktioniert – Binku

0

Das Parsen sollte durchgeführt werden, indem die falsche Formateingabe immer als Exception raiting cause beibehalten wird. Für das gleiche in C# gibt es klare Lösungen wie.

• Wenn Sie eine Zeichenkette haben und erwarten, dass sie immer eine Ganzzahl ist (z. B. wenn Ihnen ein Webservice eine Ganzzahl im Zeichenfolgenformat übergibt), verwenden Sie Int32.Parse().

• Wenn Sie Eingaben von einem Benutzer erfassen, verwenden Sie in der Regel Int32.TryParse(), da Sie dadurch eine detailliertere Kontrolle über die Situation erhalten, wenn der Benutzer ungültige Eingaben eingibt.

Convert.ToInt32() nimmt ein Objekt als Argument, und ich glaube, es Int32.TryParse() aufruft, wenn er feststellt, dass das Objekt als Argument genommen ist ein String

+0

könnten Sie mir bitte Code Beispiel zeigen. Entschuldigung dafür, dass ich so noob bin :) – Binku

+0

Schau dir das letzte Code-Snippet von @Jauch an. Es wird Ihr Problem lösen. Übrigens kannst du mir eine Zeile zeigen, die du versucht hast auszuführen – Lara

0

Wenn Sie nur numerische Werte in Ihrer TextBox „txtrate“ ermöglichen und " txttotalkm "können Sie ein" NumericUpDown "-Steuerelement verwenden. Es erlaubt nur numerische Eingaben und daher müssen die Parse-Methoden nicht verwendet werden.

Verwandte Themen