NumericUpDown中的奇怪的ArgumentOutOfRangeException

时间:2015-05-14 14:40:00

标签: c# winforms

在我当前的项目中,我使用NumericUpDowns来显示一些值。 一切都很好,但有一行代码抛出ArgumentOutOfRangeException,这是以下第三个:

verBox.SelectedIndex = (int)currentConfig.Version; //enum, casting to int
startIndexBox.Value = currentConfig.StartIndex + 1;
intervalBox.Value = currentConfig.Interval;

所以verBox是ComboBox,startIndexBox和intervalBox是NumericUpDowns。 执行此代码时,currentConfig的字段具有以下值:

currentConfig.Version = 2
currentConfig.StartIndex = 0
currentConfig.Interval = 700

现在奇怪的是异常(抛出在这段代码的第三行): 它表示值2无效,并且应该在MinimumMaximum之间 首先,价值不是2,而是700 第二件事是,intervalBox.Minimum为0,最大值为10k。

此外,Visual Studio不会在此异常中断,但程序以Code -1073741819 (0xc0000005) 'Access violation'结束。如果我将所有异常设置为在调试设置中抛出,它会中断并且我可以看到currentConfig.Interval是700,并且实际上没有理由抛出此异常。 我观察到的另一个奇怪的事情是,如果我用try / catch包围此代码的最后一行,则会在它上面的行上抛出相同的异常。

之前有人经历过这样的事吗?或者有关如何解决这个问题的任何想法?

编辑:如果我在抛出异常的行上设置断点,则抛出异常。

2 个答案:

答案 0 :(得分:1)

通过currentConfig检查验证if是否为空。如果它不为空,请验证VersionStartiIndexInterval的属性是否包含数字控件的预期值和正确值。

同时验证数字控件在页面上是否有效,并准备接受要加载它们的值。

答案 1 :(得分:0)

好的,我现在解决了这个问题:Visual Studio在错误的行上标记了异常。问题是,startIndexBox.Value得到的索引确实超出了范围,导致异常发生。