2013-04-15 2 views
1

У меня есть приложение WPF в C#, и для одного из моих текстовых полей вход выполняется, а затем автоматически преобразуется (по Цельсию в Фаренгейт). Когда вы вводите номер, он работает нормально, но после того, как все цифры введенного числа удалены, программа выйдет из строя. Думаю, это потому, что входной формат «недействителен», потому что он просто ничего не пытается преобразовать? Я в тупике о том, как обойти это, любая помощь будет оценена, спасибо!C# Program Crashes When No Number In TextBox

Это мой код в приложении:

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

Попробуйте использовать Decimal.TryParse. – LarsTech

+0

Если преобразование просто выполняется для отображения в пользовательском интерфейсе (не имеет необходимости в бизнесе), ознакомьтесь с использованием «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 Вот некоторые примеры

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