2010-10-18 30 views
0

我正在尝试创建一个选项,以删除选中的列表框中的所有未选中的项目。一切都很顺利,但是当我得到2个或更多具有相同名称的项目时,它会出错。在CheckedListBox中取消选中错误的项目

例如:我有三个项目在列表框中的名称相同,第一个选中。 我现在运行的情况下,但现在最后2被删除,第一个是选中...

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]); 
     } 
    } 
} 

如果我运行调试器,它进入循环,它i++,再次重复这个循环,在其他情况下,在clbInstant(0)的其他检查状态被检查之前,clbInstant(1)的检查状态未被检查,并且i是1.但是在其他情况下,我得到2个项目,两个都未被检查。 现在它运行第二个最后一次循环,并删除最后选中的项目,有1项未选中保持结果...

如果我有不同的名称的项目,我一点问题都没有。 ..

回答

1

为什么不试试这个代替。

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

修正的答案。 – kyndigs 2010-10-18 10:45:42

+0

.CheckedItems是可能的,但由于某种原因.UncheckedItems不是... – Ivar 2010-10-18 11:01:40

+0

对不起,这是一个错字:p现在排序,这应该通过所有列表项目并删除未选中的项目。 – kyndigs 2010-10-18 11:02:30

相关问题