2012-10-06 126 views
2

我正在使用C#windows應用程序2010 express。 這裏我有3個文本框的總費用,支付金額,到期金額。總費用應從DB中獲得,支付的金額應由用戶輸入,到期金額應由系統計算。這是我的場景。我完成了第一部分,這意味着我填寫了總費用列。 但第二部分和第三部分給我一個異常,稱爲「formatException was unhandled輸入字符串的格式不正確。」事實上,當我刪除我輸入的付款金額時,我收到了這個錯誤。這意味着在實際使用中,如果用戶輸入了錯誤的值,我將無法刪除該值。所以請通過我的代碼並糾正它。formatException未處理

這是我的代碼: -

private void textBox4_TextChanged(object sender, EventArgs e) 
    { 
     textBox5.Text = ""; 
     int due = 0; 
     due = Convert.ToInt32(textBox3.Text) - Convert.ToInt32(textBox4.Text); 
     if (textBox5.Text == null) 
     { 
      textBox5.Text = Convert.ToString(0); 
     } 
     else 
     { 

      textBox5.Text = Convert.ToString(due); 
     } 
    } 

回答

3

我建議使用SimpleType.TryParse

decimal amount,fees,due; 

decimal.TryParse(textBox3.Text,out amount); 
decimal.TryParse(textBox4.Text,out fees); 

due = amount - fees; 

textBox5.Text= due.ToString("N"); 

方法SimpleType.TryParse返回true如果被成功轉換;否則返回false

例如,

if(decimal.TryParse(textBox3.Text,out amount)) 
    //Valid 
else 
//Invalid input 
+0

感謝名單了很多.... :) – user1724557

0

您應該只允許textBox3textBox4數值,因爲Convert.ToInt32要求只有數值。

我建議你使用Int32.Parse(),因爲它可以讓你更細粒度的控制情況,當用戶在輸入無效進入。

TryParse將是最好的,因爲它總是處理異常。

due = Int32.TryParse(textBox3.Text, out amount) - 
     Int32.TryParse(textBox4.Text, out fees); 
+2

Int32.TryParse是更安全的選擇,IMO。 – Tim

+0

Thanx buddies,我的問題解決了...... :) – user1724557

+2

@ user1724557如果其中一個答案適合您,請不要忘記選中它作爲答案,方法是點擊複選標記 –