winforms 如何从CheckedListBox中删除多个选中项

yduiuuwa  于 2022-11-30  发布在  其他
关注(0)|答案(6)|浏览(168)

我知道如何从checkedlistbox中删除单个checkedItem。但现在,我想一次性删除所有选中的项目。
我试过这个:

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与一个单一的点击?

iyzzxitl

iyzzxitl1#

你可以这样做:

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

vkc1a9a2

vkc1a9a22#

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

7fhtutme3#

这是因为您修改了正在迭代的列表。使用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才能使其正常工作。

camsedfj

camsedfj4#

可能是这个帖子的插件。
清除所有项目。

checkedListBox1.Items.Clear();
7d7tgy0s

7d7tgy0s5#

这很管用。

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

我的目标是带着一个更漂亮、更少陈腐的解决方案回来。

m0rkklqb

m0rkklqb6#

您可以尝试以下解决方案:

For i As Integer = checkedListBox.Items.Count - 1 To 0 Step -1
        If checkedListBox.GetItemChecked(i) Then
            checkedListBox.Items.RemoveAt(i)
        End If
    Next

相关问题