我正在尝试一个选项,删除选中列表框中所有未选中的项。一切都很顺利,但是当我得到两个或更多同名的物品时,就错了。
例如:我在列表框中找到了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个未选中的项保留。。。