1

私はC#でWPFアプリケーションを持っています。私のテキストボックスの1つでは、入力が取得されてから自動的に変換されます(摂氏から華氏へ)。数値を入力すると問題なく動作しますが、入力した数値のすべての桁が削除されると、プログラムがクラッシュします。これは、何も変換しようとしていないため、入力形式が「無効」であるためだと思いますか? これを回避する方法に困惑しています。助けていただければ幸いです。ありがとうございます。

これはアプリケーション内の私のコードです:

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;
}
4

4 に答える 4

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");
于 2013-04-15T19:53:13.533 に答える
2
private void tempC_TextChanged(object sender, TextChangedEventArgs e)
{
    Decimal temp;
    if (!Decimal.TryParse(out temp, tempC.Text))
       return;
    ...
于 2013-04-15T19:53:01.717 に答える
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);
    }
于 2013-04-15T19:56:57.867 に答える
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      
于 2013-04-15T19:57:58.460 に答える