C#:如何从TextBox派生的类中的事件处理程序引发异常?

C#:如何从TextBox派生的类中的事件处理程序引发异常?,c#,exception-handling,C#,Exception Handling,我正在开发一个数字文本框,一个从文本框派生的控件,它只接受数字输入。(是的,我知道有很多,但我看到的比需要的复杂得多。)我的类重写OnKeyDown()并检查新输入的文本是否可以转换为数字,以及该数字是否在指定的限制内。如果数字超出限制,则引发InvalidOperationException 当我在表单上测试这个控件时,我希望看到一条未处理的异常消息弹出,但它没有。我认为这是因为忽略了事件处理程序抛出的未处理异常。但是由于这个异常是从文本框内部抛出的,所以在我的表单上没有地方可以捕捉到这个异常

我正在开发一个数字文本框,一个从文本框派生的控件,它只接受数字输入。(是的,我知道有很多,但我看到的比需要的复杂得多。)我的类重写OnKeyDown()并检查新输入的文本是否可以转换为数字,以及该数字是否在指定的限制内。如果数字超出限制,则引发InvalidOperationException

当我在表单上测试这个控件时,我希望看到一条未处理的异常消息弹出,但它没有。我认为这是因为忽略了事件处理程序抛出的未处理异常。但是由于这个异常是从文本框内部抛出的,所以在我的表单上没有地方可以捕捉到这个异常

我想我可以向我的控件添加一个名为BadValue的事件,但是我必须记住,无论我在哪里使用该控件,都要为该事件添加一个处理程序。我希望能够依靠标准异常处理,但我不知道如何处理


谢谢您的想法。

如果您不希望文本框允许用户在其中写入数字,您可以轻松使用带数字掩码的屏蔽文本框 如果用户写入数字时没有问题,则显示一条带有无效值的错误消息,则可以使用此try-catch代码

       try
        {
            int x = int.Parse(textBox1.Text);
        }
        catch
        {
            MessageBox.Show("The value is invalid");
        }
这将尝试将值解析为int..如果不是,则抛出异常
当然,您可以根据值使用任何其他数字数据类型

如果不是“合法”字符,为什么不忽略按键?或者您想抛出异常并在catch中处理它有什么具体原因吗?按键是合法的。它只会导致一个非法值。此外,文本框的文本还有其他更改方式,例如从剪贴板粘贴。我不想在我的数字文本框控件中处理它。我希望能够在包含数字文本框的表单中处理它。但为了做到这一点,我需要有代码来执行导致异常的操作。我所知道的表单中没有可以用异常处理程序包装以捕获此异常的代码。NumericUpDown控件呢?