我一直在编写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中选择了一些东西。
答案 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块中,你会找到自己的答案:)