代码之家  ›  专栏  ›  技术社区  ›  Ivar

取消选中选中列表框中的错误项

c#
  •  0
  • Ivar  · 技术社区  · 14 年前

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

    例如:我在列表框中找到了3个同名的项,第一个项被选中。

    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之前,checkstate clbInstant(0) 检查,检查状态为 clbInstant(1) 未经检查并且 i 是1。但在其他项目之后,我还有两个项目没有检查。 现在,它最后一次运行第二个循环,并删除最后一个未选中的项,结果为1个未选中的项保留。。。

    1 回复  |  直到 7 年前
        1
  •  1
  •   kyndigs    14 年前

    你为什么不试试这个呢。

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