如何从CheckedListBox中删除多个选中的项目

时间:2013-01-29 19:31:08

标签: c# winforms checkedlistbox

我知道如何从checkedItem删除单个checkedlistbox。但现在,我想一次删除所有已检查的项目。

我试过了:

foreach (var item in List_Frente.CheckedItems)
            {
                List_Frente.Items.Remove(item);
            }

但是你可能知道,它给了我一个错误,说,List that this enumerator is bound to has been modified. An enumerator can only be used if the list does not change.如何通过一次点击删除所有checkeditems

5 个答案:

答案 0 :(得分:10)

你可以这样做:

foreach (var item in List_Frente.CheckedItems.OfType<string>().ToList())
{
    List_Frente.Items.Remove(item);
}

如果你想把它全部写在一行:

List_Frente.CheckedItems.OfType<string>().ToList().ForEach(List_Frente.Items.Remove);

这仅适用于您的商品属于同一类型的商品。但看起来仍然很粗糙。

编辑 - 说明: ToList()创建一个新列表,因此,原始的CheckedItems列表可以更改,因为枚举器现在枚举我们新创建的列表,而不是原始列表。 OfType<string>()仅在那里,因为我们需要点击ToList()

答案 1 :(得分:2)

这是因为您修改了要迭代的列表。使用for语句来防止这种情况发生:

for(var i=0; i<List_Frente.CheckedItems.Count; i++)
{
    ((IList)List_Frente.CheckedItems).Remove(List_Frente.CheckedItems[0]);
}

正如this MSDN-Article中所述,CheckedListBox.CheckedItemCollection明确地实现了IList.Remove - 方法,这意味着您必须将实例强制转换为IList才能使其正常工作。

答案 2 :(得分:2)

while (checkedListBox.CheckedItems.Count > 0) {
   checkedListBox.Items.RemoveAt(checkedListBox.CheckedIndices[0]);
}

答案 3 :(得分:0)

这很有效。

object[] items = new object[checkedListBox.Items.Count];
checkedListBox.Items.CopyTo(items, 0);
checkedListBox.Items.Clear();
checkedListBox.Items.AddRange(items);

我的目标是回归一个更美丽,更少hacky的解决方案。

答案 4 :(得分:0)

可能是这篇文章的插件。

清除所有项目。

checkedListBox1.Items.Clear();