0

这是所涉及的事件处理程序的代码:

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在文本框中输入除允许的数字之外的任何内容,但是每次您尝试在框中输入任何内容时都会执行第一个 catch 语句。我环顾四周,但我似乎无法弄清楚为什么......

4

3 回答 3

5

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

我相信你想要的是:

try
{
    seed = Convert.ToInt32(((TextBox)caller).Text);
}
于 2013-01-10T21:12:52.400 回答
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.");
            }

        }

请使用上述语句,它应该可以正常工作。如果您输入一个数字,第一个异常将不会执行。

于 2013-01-10T21:14:45.377 回答
0

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

catch (FormatException exception)
{

    MessageBox.Show("Input string is not a sequence of digits."
                    + "Exception message was: " + exception.getMessage());
}
于 2013-01-10T21:35:43.630 回答