2013-04-15 27 views
1

我在C#中有一個WPF應用程序,並且在我的一個文本框中輸入了輸入,然後自動轉換(攝氏度到華氏度)。當您輸入一個號碼時,它可以正常工作,但是一旦輸入號碼的所有數字都被刪除,程序就會崩潰。我想這是因爲輸入格式是'無效',因爲它只是試圖轉換什麼? 我很難找到如何解決這個問題,任何幫助將不勝感激,謝謝!當文本框中沒有編號時,C#程序崩潰

這是在應用程序中我的代碼:

private void tempC_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    tempC.MaxLength = 3; 
    Temperature T = new Temperature(celsius); 
    T.temperatureValueInCelcius = Convert.ToDecimal(tempC.Text); 
    celsius = Convert.ToDecimal(tempC.Text); 
    T.ConvertToFarenheit(celsius); 
    tempF.Text = Convert.ToString(T.temperatureValueInFahrenheit); 
} 

,這是從API的代碼我已經創建了:

public decimal ConvertToFarenheit(decimal celcius) 
{ 
    temperatureValueInFahrenheit = (celcius * 9/5 + 32); 

    return temperatureValueInFahrenheit; 
} 
+2

。 – LarsTech

+0

如果只是在UI中顯示轉換(沒有業務需求),然後使用'ValueConverter'進行研究。 –

回答

2
private void tempC_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    Decimal temp; 
    if (!Decimal.TryParse(out temp, tempC.Text)) 
     return; 
    ... 
+1

難道你錯過了一個out參數嗎? – LarsTech

+1

Ack。是。 'TryParse'就是這樣一種憎惡。 –

+0

@RobertHarvey你真的不喜歡它:-) – Steve

5

你應該調用方法Decimal.TryParse,試圖如果轉換不可能,則轉換該值和信號。

if(Decimal.TryParse(tempC.Text, out celsius)) 
{ 
    // Value converted correctly 
    // Now you can use the variable celsius 

} 
else 
    MessageBox.Show("The textbox cannot be converted to a decimal"); 
0

試試這個:

private void tempC_TextChanged(object sender, TextChangedEventArgs e) 
    { 
     if(tempC.Text = "") 
      return; 
     tempC.MaxLength = 3; 
     Temperature T = new Temperature(celsius); 
     T.temperatureValueInCelcius = Convert.ToDecimal(tempC.Text); 
     celsius = Convert.ToDecimal(tempC.Text); 
     T.ConvertToFarenheit(celsius); 
     tempF.Text = Convert.ToString(T.temperatureValueInFahrenheit); 
    } 
0

嘗試Decimal.TryParse 這裏是嘗試使用Decimal.TryParse一些例子

string value; 
decimal number; 

// Parse a floating-point value with a thousands separator. 
value = "1,643.57"; 
if (Decimal.TryParse(value, out number)) 
    Console.WriteLine(number); 
else 
    Console.WriteLine("Unable to parse '{0}'.", value);  

// Parse a floating-point value with a currency symbol and a 
// thousands separator. 
value = "$1,643.57"; 
if (Decimal.TryParse(value, out number)) 
    Console.WriteLine(number); 
else 
    Console.WriteLine("Unable to parse '{0}'.", value); 

// Parse value in exponential notation. 
value = "-1.643e6"; 
if (Decimal.TryParse(value, out number)) 
    Console.WriteLine(number); 
else 
    Console.WriteLine("Unable to parse '{0}'.", value); 

// Parse a negative integer value. 
value = "-1689346178821"; 
if (Decimal.TryParse(value, out number)) 
    Console.WriteLine(number); 
else 
    Console.WriteLine("Unable to parse '{0}'.", value); 
// The example displays the following output to the console: 
//  1643.57 
//  Unable to parse '$1,643.57'. 
//  Unable to parse '-1.643e6'. 
//  -1689346178821