抛出ArgumentOutOfRange异常

时间:2013-08-10 18:10:34

标签: c# combobox

我一直在编写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中选择了一些东西。

3 个答案:

答案 0 :(得分:4)

您的ComboBox似乎未选择任何项目。看看documentation

  

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

解决此问题的最明显方法是在尝试使用之前检查项目是否已被选中,如下所示:

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

答案 1 :(得分:0)

检查代码何时触发。可能是在填充combo1时,但combo2还没有。

正如其他人所说的快速方法是测试selectedIndex&gt; = 0或selectItem!= null。

答案 2 :(得分:0)

最好的办法是,将代码放在try catch块中,你会找到自己的答案:)