使用循环从列表框中选择/删除选项

时间:2014-03-17 19:32:29

标签: c# asp.net for-loop listbox visual-web-developer-2010

所以基本上我使用FOR循环来添加和删除列表框中的选项。 当选择1个选项(从删除或选择)时它正常工作,并且当我选择两个单独的选项(例如,项目[0]和项目[4])时它正常工作。

但是,当我尝试选择所有选项或选择两个并排的项目时,我遇到了麻烦([2],[3] ..等)

这是我的select函数循环:

protected void btnSelect_Click(object sender, EventArgs e)
{
    for (int intCounter = 0; intCounter < lbSnacks.Items.Count; intCounter++)
    {
        if (lbSnacks.Items[intCounter].Selected) // if the snack is selected
        { // add the listitem to the lbSelected listbox
            lbSelected.Items.Add(lbSnacks.Items[intCounter]);
        }

    }
    for (int intCounter = 0; intCounter < lbSnacks.Items.Count; intCounter++)
    {
        if (lbSnacks.Items[intCounter].Selected) // if the snack is selected
        { // add the listitem to the lbSelected listbox
            lbSnacks.Items.Remove(lbSnacks.Items[intCounter]);
        }

    }
}

该错误基本上是将该项目放入“选定”列表框中,但它会留下原始“零食”框中的两个选项之一。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

问题是,当你删除一个项目时,所有其他项目都向下移动 - 这意味着下一个循环迭代(因为它会增加你的索引)&#34;跳过&#34;一件事。

有多种方法可以解决这个问题。最简单的就是向后循环:

for (int intCounter = lbSnacks.Items.Count-1; intCounter >= 0; intCounter--)
{
    if (lbSnacks.Items[intCounter].Selected) // if the snack is selected
    { // add the listitem to the lbSelected listbox
        lbSelected.Items.Add(lbSnacks.Items[intCounter]);
        lbSnacks.Items.Remove(lbSnacks.Items[intCounter]);
    }
}

这样,当项目&#34;移动&#34;时,它并不重要,因为您已经处理过这些项目。