所以基本上我使用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]);
}
}
}
该错误基本上是将该项目放入“选定”列表框中,但它会留下原始“零食”框中的两个选项之一。
有什么想法吗?
答案 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;时,它并不重要,因为您已经处理过这些项目。