1

2 つのテキスト ボックスを計算し、結果を 3 番目のテキスト ボックスに表示するために、TextChanged イベントを使用しています。ただし、既に機能していますが、2 つのテキストボックスのいずれかの値が変更されると、FormatException '入力文字列が正しい形式ではありません' が発生しました。これが私のコードです:

private void txtCustActualDefect_TextChanged(object sender, EventArgs e)
{
    int TargetDefect = int.Parse(txtCustTargetDfect.Text);
    int ActualDefect = int.Parse(txtCustActualDefect.Text);

    decimal Per = ((decimal)ActualDefect / (decimal)TargetDefect) * 100;
    txtCustPercentageDefect.Text = Per.ToString();
}

値を変更すると値がゼロになることはわかっていますが、どうすればそれを防ぐことができますか

4

2 に答える 2

1

を使用できますint.TryParsetrueキャストが合格した場合に返されるもの。

                 int TargetDefect;
                 int.TryParse(txtCustTargetDfect.Text, out TargetDefect);

                 int ActualDefect;
                 int.TryParse(txtCustActualDefect.Text, out ActualDefect);

より安全な実装は次のようになります。

            int TargetDefect;
            int ActualDefect;

            if(int.TryParse(txtCustTargetDfect.Text, out TargetDefect) && int.TryParse(txtCustActualDefect.Text, out ActualDefect))
            {
                decimal Per = ((decimal) ActualDefect/(decimal) TargetDefect)*100;
                txtCustPercentageDefect.Text = Per.ToString();
            }
于 2013-05-01T11:15:40.337 に答える
0

TextBox の Text プロパティの値が になることはありませんがnull、 になることはありString.Emptyます。つまり、空の文字列です。

空の文字列または整数として読み取れないその他の文字列を解析すると、例外がスローされます。

TryParse例外の可能性なしに文字列を試して解析するために使用できます。

int actualDefect;
bool result = int.TryParse(txtCustActualDefect.Text, out actualDefect);

結果が の場合true、変換は成功しました。失敗した場合false:

if (result)
{
    // The conversion was succesful
}
else
{
    // The conversion has failed
}
于 2013-05-01T11:25:28.470 に答える