[英]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.