Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:用户代码未处理ArgumentOutOfRangeException_C#_Forms_Listbox - Fatal编程技术网

C#:用户代码未处理ArgumentOutOfRangeException

C#:用户代码未处理ArgumentOutOfRangeException,c#,forms,listbox,C#,Forms,Listbox,我有一个if语句,它说如果一个网页有一个特定的文本,就可以删除列表框中的选定项并向下迭代到下一个 我编写了一些代码,但当我尝试时,我不断得到: usercode未处理ArgumentOutOfRangeException 这是更详细的错误: {“InvalidArgument='1'的值对无效 “SelectedIndex”。\r\n参数名称:SelectedIndex”} 这是我的代码: listBox1.Items.Remove(listBox1.SelectedItem);

我有一个if语句,它说如果一个网页有一个特定的文本,就可以删除列表框中的选定项并向下迭代到下一个

我编写了一些代码,但当我尝试时,我不断得到:

usercode未处理ArgumentOutOfRangeException

这是更详细的错误:

{“InvalidArgument='1'的值对无效 “SelectedIndex”。\r\n参数名称:SelectedIndex”}

这是我的代码:

        listBox1.Items.Remove(listBox1.SelectedItem);
        listBox1.SelectedIndex = + 1;
编辑:


谢谢大家的帮助!我没有删除项目,只是让它向下迭代,从而消除了这个问题。

我必须查看完整的代码示例(带有if语句)才能确定。但很明显,您正在将所选项目设置为列表框中不存在的索引

小心,selectedIndex是基于零的,而不是基于一的

MSDN提到了您的错误:

ArgumentOutOfRangeException:指定的值小于-1或 大于或等于项目计数


由于错误指示将SelectedIndex设置为1时发生,因此我假设调用此代码时列表框中只有一项(index=0)。

由于索引是基于0的,因此将
SelectedIndex设置为1将选择列表中的第二个值。我猜,当您删除除一个值以外的所有值并试图将
SelectedIndex
设置为第二个值时,它会失败。

是否要选择列表框中的第一项?如果是这样,代码将是:

if(listBox1.Items.Count > 0) listBox1.SelectedIndex = 0;

您必须测试您试图选择的项目是否存在

int index = listBox1.SelectedIndex;
listBox1.Items.RemoveAt(index);
If (index < listBox1.Items.Count) {
    listBox1.SelectedIndex = index; 
}

列表框中有多少项?为什么将SelectedIndex设置为1?如果删除最后一项,则不应将其设置为1。必须至少还剩两个项目。
listBox1.SelectedIndex=+1
与执行
listBox1.SelectedIndex=1
@slfan的操作相同。我在我的list@EtiennedeMartel所以我应该改成那样?@user1017524取决于你的确切意思。如果您想增加索引,那么您应该编写
listBox1.SelectedIndex+=1
。他没有增加索引,只是将其设置为1。但是是的,它在外面range@JohnFx实际上,我在ListBox中有两项,但您正在删除它前面一行中的一项,这意味着最高的索引将是0我正在用两个项目测试它,但是会有更多的项目我不需要它转到第一个项目当我删除代码删除选定的项目并保留一个向下迭代到下一个项目时,我仍然会得到相同的错误如果你尝试迭代,我认为你的语法错误。你的意思是
listBox1.SelectedIndex+=1?这实际上是
listBox1.SelectedIndex=listBox1.SelectedIndex+1这更多的是在OP中,但此处的代码将根据所选项目是在已删除项目的上方还是下方而不同。如果删除的项目在所选项目之前,则保持索引不变将选择下一个项目,如果不是,则此处的代码将按照OP的意图工作。您可能还需要考虑如何处理错误情况。是否不选择任何内容?以前的选择?最后一项?第一项?OP讨论了迭代。这可能会产生误导。他可能根本不想做循环,而是选择下一个项目。在这种情况下,要选择的项的索引将保持与已删除项的索引相同,因为下一项将取代已删除项。
for (int i = listBox1.Items.Count - 1; i >= 0; i--) {
    if (listBox1.Items[i].ToString() == "whatever") {
        listBox1.Items.RemoveAt(i);
    }
}