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

本文关键字:选择 删除 选项 循环 列表 | 更新日期: 2023-09-27 17:50:36

所以基本上我使用FOR循环从列表框中添加和删除选项。当选择一个选项(从删除或选择)时,它正常工作,当我选择两个单独的选项(例如,item[0]和item[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]);
        }
    }
}

错误基本上是将项目放入"selected"列表框中,但它在原始的"snacks"框中留下了两个选项之一。

任何想法?

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

问题是,当您删除一个项目时,所有其他项目向下移动-这意味着下一次循环迭代(因为它增加了索引)"跳过"一项

有多种方法来处理这个问题。最简单的方法是反向循环:

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]);
    }
}

这样,当项"移位"时,这并不重要,因为您已经处理了这些项。