簡體   English   中英

如何從 CheckedListBox 中刪除多個選中的項目

[英]How to delete multiple checked items from CheckedListBox

我知道如何從checkedlistbox checkedItem 但是現在,我想刪除一個 go 中的所有選中項。

我試過這個:

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. List that this enumerator is bound to has been modified. An enumerator can only be used if the list does not change. 我怎樣才能通過單擊刪除所有checkeditems的項目?

你可以這樣做:

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

這是因為您修改了要迭代的列表。 使用for語句來防止這種情況發生:

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

正如本MSDN文章中所述, CheckedListBox.CheckedItemCollection明確地實現了IList.Remove -method,這意味着您必須將實例IList轉換為IList才能使其工作。

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

這有效。

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

我的目標是回歸一個更美麗,更少hacky的解決方案。

可能是這篇文章的插件。

清除所有項目。

checkedListBox1.Items.Clear();

您可以嘗試以下解決方案:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM