【问题标题】:Unchecking wrong item in CheckedListBox取消选中 CheckedListBox 中的错误项目
【发布时间】:2010-10-18 09:46:11
【问题描述】:

我正在尝试做一个选项,删除选中列表框中所有未选中的项目。一切都很好,但是当我得到 2 个或更多同名的项目时,它就出错了。

例如:我在列表框中有 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之前,检查clbInstant(0)的检查状态,clbInstant(1)的检查状态未检查,并且i 是 1。但是在 else 之后,我还剩下 2 项,都未选中。 现在它第二次运行循环,它删除了最后一个未选中的项目,结果保留了 1 个未选中的项目...

如果我有不同名称的项目,我完全没有问题......

【问题讨论】:

    标签: c#


    【解决方案1】:

    你为什么不试试这个呢。

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

    【讨论】:

    • 抱歉打错了 :p 现在已排序,这应该遍历所有列表项并删除未选中的项。
    • 如果我使用它并选中 1 个或多个复选框,它什么也不做。当我没有检查时,我收到一条“InvalidOperationException 未处理”消息。
    • 从 foreach 部分中删除 .CheckedItems。
    猜你喜欢
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多