使用循环从列表框中选择/删除选项
本文关键字:选择 删除 选项 循环 列表 | 更新日期: 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]);
}
}
这样,当项"移位"时,这并不重要,因为您已经处理了这些项。