J'essaie de faire une option, pour supprimer tous les éléments non cochés dans une zone de liste cochée. Tout se passe bien, mais quand je reçois 2 ou plus articles avec le même nom, ça ne va pas. Par exemple: J'ai reçu 3 articles dans la liste avec le même nom, avec le premier vérifié. Maintenant, je exécuter l'événement, mais maintenant les 2 derniers sont enlevés, et le premier est décoché ...Désélectionner un mauvais élément dans CheckedListBox
private void removeAllUncheckedProcessesToolStripMenuItem_Click(object sender, EventArgs e)
{
int i = 0;
while (true)
{
if (clbInstant.Items.Count - i == 0)
{
break;
}
if (clbInstant.GetItemCheckState(i) == CheckState.Checked)
{
i++;
}
else
{
clbInstant.Items.Remove(clbInstant.Items[i]);
}
}
}
Si je lance le débogueur, il entre dans la boucle, est-i++
, se répète à nouveau la boucle, va à l'autre, avant l'autre, checkstate de clbInstant(0)
est vérifiée, le checkstate de clbInstant(1)
est décoché et i
est 1. Mais après l'autre, j'ai eu 2 articles restent, avec les deux non cochée. Maintenant il exécute la boucle pour la deuxième fois, et il supprime le dernier élément non coché, avec le résultat de 1 élément non coché reste ...
Si j'ai des éléments avec des noms différents, je n'ai eu aucun problème. ..
Réponse révisée. – kyndigs
.CheckedItems est possible, mais pour une raison quelconque .UncheckedItems n'est pas ... – Ivar
Désolé, c'était une faute de frappe: p trié maintenant, cela devrait passer par tous les éléments de la liste et supprimer ceux non cochées. – kyndigs