清除列表框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中的多个选定项目?

仍然没有任何效果。我做错了什么?

清除列表框C#中的多项

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所做的任何更改都会更改SelectedItemsSelectedIndices等内容。一旦创建了一个独立的数组并将选定的项放入其中,对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((删除的问题。