2010-10-18 5 views
0

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épondre

1

Pourquoi ne pas essayer ceci à la place?

foreach(object itemChecked in checkedListBox1) 
    { 
     if(checkedListBox1.GetItemCheckState(checkedListBox1.Items.IndexOf(itemChecked))== CheckState.UnChecked) 
      checkedListBox1.Items.Remove(itemChecked) 
    } 
+0

Réponse révisée. – kyndigs

+0

.CheckedItems est possible, mais pour une raison quelconque .UncheckedItems n'est pas ... – Ivar

+0

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

Questions connexes