Comment faire pour supprimer plusieurs éléments cochés de CheckedListBox
Je sais comment faire pour supprimer un seul checkedItem
de checkedlistbox
. Mais maintenant, je veux enlever tous les éléments cochés dans un aller.
J'ai essayé ceci:
foreach (var item in List_Frente.CheckedItems)
{
List_Frente.Items.Remove(item);
}
Mais comme vous le savez probablement, il me donne une erreur,en disant que, List that this enumerator is bound to has been modified. An enumerator can only be used if the list does not change.
Comment puis-je supprimer tous les checkeditems
avec un seul clic ?
- N'utilisez pas de
foreach
. Utiliser unfor
. - Je ne suis pas familier avec les winforms, mais pouvez-vous faire un
List_Frente.CheckedItems.ToList()
? si vous pouvez résoudre le problème - non, juste
ToString()
=( foreach
utilise un itérateur. Vous ne pouvez pas apporter des modifications à une collection bien qu'il existe un actif itérateur. Vous ne pouvez pas faire cela, dans sa forme actuelle, avec unforeach
.- mais comment pourrais-je obtenir la valeur de la
checkeditems
sansforeach
? for (i = 0; i < (List_Frente.Items.Count ; i++)
Consultez cette page: msdn.microsoft.com/en-us/library/e954th47.aspx- double possible de Comment dois-je faire je boucle sur les éléments d'une zone de liste, puis supprimer cet élément?
Vous devez vous connecter pour publier un commentaire.
vous pourriez faire quelque chose comme ceci:
Si vous voulez écrire en une ligne:
Cela ne fonctionne que si vos éléments sont du même type, bien sûr. Regarde encore brut, si.
Edit-Explication:
ToList()
crée une nouvelle liste et donc, l'original CheckedItems liste peut être modifiée, comme l'agent recenseur maintenant énumère notre liste nouvellement créée, et non l'original. LeOfType<string>()
n'est là que parce que nous avons besoin de quelque choseToList()
sur.OfType<T>
etToList()
créer une nouvelle instance d'unList
et puis vous itérer sur que. Au lieu d'itération de la collection originale, qui va produire une exception si vous avez supprimé un élément de celui-ci lors de l'itération.List_Frente.CheckedItems.OfType<string>().ToList().ForEach(List_Frente.Items.Remove);
C'est parce que vous modifiez la liste, vous êtes à parcourir. L'utilisation d'une instruction pour empêcher que cela se passe:
Comme indiqué dans cette MSDN-Article la
CheckedListBox.CheckedItemCollection
met en œuvre laIList.Remove
-méthode explicitement, ce qui signifie que vous avez à jeter les instances deIList
pour faire ce travail.ChedkItems.REMOVE()
. J'ai essayé, mais il n'existent pas ;\Remove
-Méthode - sauf qu'il doit être mis en œuvre de manière explicite. Je vais modifier ma réponse en conséquence.Cela fonctionne.
Mon but est de revenir avec une solution qui sont de plus en plus beau et moins hacky.
Peut-être un addon pour ce poste.
Pour effacer tous les éléments.