使用TextChanged事件时防止FormatException

本文关键字:FormatException TextChanged 事件 使用 | 更新日期: 2023-09-27 18:11:34

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

我知道当改变值时,它取0的值,但是我怎么能防止呢

使用TextChanged事件时防止FormatException

您可以使用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();
            }

TextBox的Text属性的值不能是null,但可以是String.Empty,即一个空字符串。

解析空字符串或其他不能作为整数读取的字符串将导致抛出异常。

您可以使用TryParse来尝试解析字符串,而不会出现异常:

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

如果result是true,表示转换成功;如果false失败了:

if (result)
{
    // The conversion was succesful
}
else
{
    // The conversion has failed
}