1

我一直在编写一个 Winforms 应用程序,其中用户从组合框中选择一些东西。但是,当我运行应用程序时,编译器会抛出 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;
            }
        }

谁能解释一下为什么抛出这个异常,因为我确实从组合框中选择了一些东西。

4

3 回答 3

4

似乎没有在您的ComboBox. 看看文档

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

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

int index = comboBox2.SelectedIndex;
if (index >= 0)
{
    string t = comboBox2.Items[index].ToString();
    switch (t)
    {
        ...
    }
}
于 2013-08-10T18:12:04.430 回答
0

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

于 2013-08-10T18:23:59.243 回答
0

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

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

于 2013-08-10T18:19:25.867 回答