【问题标题】:C#: For loop not iteratingC#:For循环不迭代
【发布时间】:2012-01-05 07:17:49
【问题描述】:

我有一个 for 循环,它会为列表框中的每个项目执行一个子项。奇怪的是 for 循环根本没有迭代。我不得不强制它迭代到第一个项目,但如果完成了该项目的所有 subs,它就停止了。

我怎样才能让它对列表框中的每个项目保持迭代?

这是我的代码:

listBox7.SelectedIndex = 0;

for (int i = 0; i < listBox7.Items.Count; i++)
{
    sub1();
    sub2();

    listBox1.Items.Add(listBox7.SelectedItem.ToString() + "\r");

    while (listBox7.SelectedItems.Count > 0)
    {
        listBox7.Items.Remove(listBox7.SelectedItems[0]);
    }

    webBrowser1.Navigate("http://www.google.com");
}

【问题讨论】:

  • 你确定listBox7.Items.Count大于0吗?
  • 你的循环应该做什么?它从不使用i,只使用SelectedItem - 它们非常不同。您是否使用SelectedIndex/SelectedItem 迭代listBox7?不要那样做。
  • 另外,将列表框重命名为有意义的名称
  • 您是否更改了 sub1 或 sub2 上的 listBox7 项目选择?
  • @DarthVader 是的,我可以在列表框中输入项目

标签: c# for-loop iteration loops


【解决方案1】:

您很可能会删除内部 while 语句中的所有项目,而在第二遍中没有留下任何可迭代的内容。

如果您的 listBox1 包含超过 1 个项目,则以下行将始终引发异常:

listBox1.Items.Add(listBox7.SelectedItem.ToString() + "\r");

因为不再有选定的项目。

这就是为什么即使您只是在测试某些东西,异常处理也是至关重要的。

如果您的目标是处理 listBox7 中的每个项目,那么您可以通过移动以下行来完成此操作:

listBox7.SelectedIndex = 0;

在for循环内,行上方

sub1();

【讨论】:

  • listbox7中的所有项目都被选中的情况。如果不是,循环仍然会执行,但什么也不做......
  • @Ajai:确实;这就是为什么我用“最有可能”来限定这个陈述。但这种情况符合 OP 报告的问题。
  • @competent_tech 我不认为是因为没有选择所有项目,只有 1 个
  • @user1017524:用更多 cmets 更新了我的答案。
  • @competent_tech 奇怪,我把它放在 for 循环中,但是,一旦它完成第一项,它就会停止。我应该把 listBox7.SelectedIndex = 0;在子上方和循环结束时?
猜你喜欢
  • 1970-01-01
  • 2021-08-18
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 2022-01-23
  • 1970-01-01
相关资源
最近更新 更多