引发ArgumentOutOfRange异常

本文关键字:异常 ArgumentOutOfRange 引发 | 更新日期: 2023-09-27 18:27:14

我一直在编写一个Winforms应用程序,其中用户从comboBox中选择一些内容。但是,当我运行应用程序时,编译器抛出ArgumentOutOfRange异常,因为索引为-1。

代码:

 if (comboBox1.Enabled == false || comboBox2.Enabled == true || comboBox3.Enabled == false)
        {
            int index = comboBox2.SelectedIndex;
            string t = comboBox2.Items[index].ToString();//<==EXCEPTION
            switch (t)
            {
                case "Ounzes==>Pounds":
                    break;
                case "Pounds==>Ounzes":
                    break;
                case "Tons==>Pounds":
                    break;
                case "Pounds==>Tons":
                    break;
                case "Ounzes==>Tons":
                    break;
                case "Tons==>Ounzes":
                    break;
                case "Stone==>Pound":
                    break;
                case "Pound==>Stone":
                    break;
                case "Tons==>Stone":
                    break;
                case "Stone==>Ton":
                    break;
            }
        }

有人能解释一下为什么会抛出这个异常吗,因为我确实从comboBox中选择了一些东西。

引发ArgumentOutOfRange异常

您的ComboBox中似乎没有选择任何项目。查看文档:

当前所选项目的从零开始的索引。如果未选择任何项目,则返回负一(-1)的值。

解决这个问题最明显的方法就是在你尝试使用之前检查一下,确保已经选择了一个项目,比如:

int index = comboBox2.SelectedIndex;
if (index >= 0)
{
    string t = comboBox2.Items[index].ToString();
    switch (t)
    {
        ...
    }
}

检查代码何时启动。可能是combo1被填充的时候,但combo2还没有。

正如其他人所说,快速方法是测试selectedIndex>=0或selectItem!=无效的

最好的做法是将代码放入try-catch块中,您将自己找到答案:)