使用TextChanged事件时阻止FormatException

时间:2013-05-01 11:11:27

标签: c# events textchanged

我正在使用TextChanged Event来计算两个文本框并在第三个文本框中显示结果。但是,它已经可以工作但是当两个文本框中的任何一个的值发生变化时,我得到了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();
}

我知道在更改值时,它需要零值,但我该如何防止它 我会赞赏的任何想法

2 个答案:

答案 0 :(得分:1)

您可以使用int.TryParse。如果演员通过,将返回true

                 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();
            }

答案 1 :(得分: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
}