清除列表框C#中的多项
本文关键字:列表 清除 | 更新日期: 2023-09-27 18:07:57
我尝试过的:
尝试1:
for(int x = listBox1.SelectedIndices.Count - 1; x>= 0; x--)
{
int idx = listBox1.SelectedIndices[x];
listBox2.Items.Add(listBox1.Items[idx]);
listBox1.Items.RemoveAt(idx);
}
尝试2:
ArrayList tmpArr = new ArrayList();
foreach (object obj in listBox1.SelectedItems)
{
listBox2.Items.Add(obj);
tmpArr.Add(obj);
}
foreach (object obj in tmpArr.ToArray())
{
listBox1.Items.Remove(obj);
}
还尝试了以下帖子中的所有内容:如何删除ListBox中的多个选定项目?
仍然没有任何效果。我做错了什么?
var selectedItems = new object[listBox1.SelectedItems.Count];
listBox1.SelectedItems.CopyTo(selectedItems, 0);
foreach (var item in selectedItems)
{
listBox1.Items.Remove(item);
}
或者用一点LINQ来简化代码:
foreach (var item in listBox1.SelectedItems.Cast<object>().ToArray())
{
listBox1.Items.Remove(item);
}
这里的理由是,你先得到所有选定的项目,然后把它们放在另一个列表中。最初的问题是,对ListBox
所做的任何更改都会更改SelectedItems
和SelectedIndices
等内容。一旦创建了一个独立的数组并将选定的项放入其中,对ListBox
所做的任何操作都不会影响该数组,因此您可以正常枚举它。
listbox1.BeginUpdate();
for (int x = listBox1.SelectedIndices.Count - 1; x >= 0; x--)
{
int idx = listBox1.SelectedIndices[x];
listBox1.Items.RemoveAt(idx);
}
listbox1.EndUpdate();
如果不能保证列表中的每个对象都是唯一的,那么这是正确的方法,以确保删除正确的选定项目。
如果你的列表框中有多个相同对象,你必须用"索引"来引用它们,否则,如果你用"项目"来删除它们,它将删除它找到的任何匹配项目的第一个实例。
我正在编写一份巴士路线规划,要求复制列表中的航路点标记。这些被存储为字符串,所以例如我可能有"w1"、"w2"、"w3"。。。"w2"(想象一辆公共汽车沿着一条大街行驶,绕过几个街区,然后从另一边返回,以了解我为什么会有这样的标志……我只需要在道路中心设置路标,而不是在每条车道上(
如果我选择最后一个"w2"标记作为范围的一部分,并使用selectedItem((方法删除它们,它会删除第一个"w1",而不是第二个。通过使用SelectedIndex((方法,它根据位置而不是值进行删除,因此重复的值可以安全地保持不变。
我只是想补充一点,因为我刚刚处理了同样的问题,所以亲眼看到了SelectedItem((删除的问题。