简单的C#Windows应用程序 - Catch语句总是执行,无论如何

时间:2013-01-10 21:11:21

标签: c# validation textbox try-catch

以下是涉及的事件处理程序的代码:

private void textBox1_TextChanged(object sender, EventArgs e)
        {
            try
            {
                seed = Convert.ToInt32(this.Text);
            }
            catch (FormatException)
            {
                MessageBox.Show("Input string is not a sequence of digits.");
            }
            catch (OverflowException)
            {
                MessageBox.Show("The number cannot fit in an Int32.");
            }

        }

它应该确保用户不会在文本框中键入除Int32允许的数字之外的任何内容,但是每次尝试在框中键入ANYTHING时都会执行第一个catch语句。我环顾四周,但似乎无法弄明白为什么......

3 个答案:

答案 0 :(得分:5)

可能是因为this.Text没有从输入框中读取,而是定义了处理程序的类。

我相信你想要的是:

try
{
    seed = Convert.ToInt32(((TextBox)caller).Text);
}

答案 1 :(得分:0)

private void textBox1_TextChanged(object sender, EventArgs e)
        {
            try
            {
                seed = Convert.ToInt32(textBox1.text);
            }
            catch (FormatException)
            {
                MessageBox.Show("Input string is not a sequence of digits.");
            }
            catch (OverflowException)
            {
                MessageBox.Show("The number cannot fit in an Int32.");
            }

        }

请使用上述声明,它应该正常工作。如果输入数字,则不会执行第一个异常。

答案 2 :(得分:0)

使用以下内容(暂时当然)来查看错误消息可能会有所帮助:

catch (FormatException exception)
{

    MessageBox.Show("Input string is not a sequence of digits."
                    + "Exception message was: " + exception.getMessage());
}