我正在尝试创建一个选项,删除已选中列表框中所有未选中的项目。一切都很顺利,但当我得到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个未选中的项目仍然存在......
如果我有不同名字的物品,我根本没有问题......
答案 0 :(得分:1)
为什么不试试这个呢。
foreach(object itemChecked in checkedListBox1)
{
if(checkedListBox1.GetItemCheckState(checkedListBox1.Items.IndexOf(itemChecked))== CheckState.UnChecked)
checkedListBox1.Items.Remove(itemChecked)
}