2014-04-18 42 views
0

我有一個TextBox其中我想要放置一個數字,程序應該讀取它,通過將其轉換爲十進制數,但是,在執行所需的數學數字後,如果我從TextBox刪除它,它立刻產生一個錯誤:刪除從文本框中的數字會產生錯誤

Format exception was unhandled (input string in a incorrect format)

這種情況就行上,我嘗試將文本轉換爲十進制

private void readW_TextChanged(object sender, EventArgs e) 
{ 
    string _W = readW.Text; 
    _Wd = Convert.ToDecimal(_W); 
} 

回答

2

你得到

Format exception was unhandled (input string in a incorrect format)

因爲string.Empty不能轉換爲decimal

您可以使用TryParse如果分析失敗時通知您:

bool success = decimal.TryParse(_W, out _Wd); 
if (success) { 
    // Use the result 
} 
else { 
    // Depending on your needs, do nothing or show an error 
} 

注意_Wstring.Empty可能要忽略的條件,而其他解析故障可能保證一個錯誤信息。如果是這樣,你else可能看起來像

else { 
    if (!string.IsNullOrEmpty(_W)) ShowAnErrorMessageSomehow(); 
} 
+0

使用結果意味着「_Wd = Convert.ToDecimal(_W);」,如果它變成一個空框,程序將什麼都不做,而不是提供錯誤,這是正確的嗎? –

+0

使用'decimal.TryParse' *而不是* Convert.ToDecimal()'。 'decimal.'TryParse()'返回* false *如果解析失敗,而'Convert.ToDecimal()'拋出一個異常。對於普通的程序流量控制(例如,用戶不輸入文本),最好檢查布爾結果而不是捕捉異常。在我所示的代碼中,如果'success'爲* true *,'Wd'將包含解析的十進制值。 –

+0

非常感謝 –

1

聽起來像是你讓這樣該數字不能轉換爲小數。不出所料,這會導致轉換失敗。嘗試使用Decimal.TryParse代替:

private void readW_TextChanged(object sender, EventArgs e) 
{ 
    string _W = readW.Text; 
    Decimal.TryParse(_W, out _Wd); 
} 

這將防止發生異常,如果轉換失敗。它也將返回一個布爾值,你可以用它來執行其它操作條件,只有當轉換成功,例如:

private void readW_TextChanged(object sender, EventArgs e) 
{ 
    string _W = readW.Text; 
    if(Decimal.TryParse(_W, out _Wd)) 
    { 
     Console.WriteLine("Valid decimal entered!"); 
    } 
} 
+0

但是當我使用「Decimal.TryParse(_W,出_Wd);」將文成十進制轉換就像前面的代碼,只有的TryParse的附加功能,這是正確的? –

+0

@CésarAmorim完全不需要使用Convert.ToDecimal' TryParse與Convert.ToDecimal做同樣的轉換,只是它不會拋出FormatExceptions而返回值是一個bool。你是否轉換成功。 –

+0

非常感謝您 –

0

請試試這個代碼。但要確保用戶只能在文本框中輸入數字。謝謝。

private void readW_TextChanged(object sender, EventArgs e) 
{ 
    string _W = readW.Text; 
    _Wd = Convert.ToDecimal("0"+_W); 
}