取消选中CheckedListBox中的错误项目

时间:2010-10-18 09:46:12

标签: c#

我正在尝试创建一个选项,删除已选中列表框中所有未选中的项目。一切都很顺利,但当我得到2个或更多同名的物品时,就会出错。

例如:我在列表框中输入了3个具有相同名称的项目,并检查了第一个项目。 现在我运行该事件,但现在最后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++,再次重复循环,转到else,在else之前,检查clbInstant(0)的检查状态,{{1}的检查状态1}}未选中且clbInstant(1)为1.但在其他之后,我仍然保留了2个项目,两者都未选中。 现在它最后一次运行循环,并删除最后一个未选中的项目,结果是1个未选中的项目仍然存在......

如果我有不同名字的物品,我根本没有问题......

1 个答案:

答案 0 :(得分:1)

为什么不试试这个呢。

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