5

我知道如何checkedItemcheckedlistbox. 但是现在,我想一次性删除所有选中的项目。

我试过这个:

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通过单击删除所有内容?

4

5 回答 5

11

你可以这样做:

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()

于 2013-01-29T19:40:40.753 回答
4
while (checkedListBox.CheckedItems.Count > 0) {
   checkedListBox.Items.RemoveAt(checkedListBox.CheckedIndices[0]);
}
于 2015-05-30T20:11:45.000 回答
2

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

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

本 MSDN-Article中所述,显式CheckedListBox.CheckedItemCollection实现了IList.Remove-method,这意味着您必须强制转换实例才能IList使其工作。

于 2013-01-29T19:37:09.247 回答
2

可能是这篇文章的插件。

清除所有项目。

checkedListBox1.Items.Clear();
于 2015-09-08T09:25:01.177 回答
0

这行得通。

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

我的目标是返回一个更漂亮、更少hacky的解决方案。

于 2013-01-29T20:01:58.457 回答