我有一个扩展样式为LVS_EX_CHECKBOXES
的MFC列表视图控制框。我的删除按钮处理程序代码从列表视图控制框中删除选中的项目,如下所示:
for (int i = 0; i < m_cList.GetItemCount(); i++)
{
// checking for checked items
BOOL bCheck = m_cList.GetCheck(i);
if (bCheck != 0)
{
//deleting the checked items
m_cList.DeleteItem(i);
}
}
我的代码的问题是,当我单击"删除"按钮时,它不会一次性删除所有选中的项目。而是一次从列表视图控制框中删除一个项目。因此,如果我想删除多个选中的项目,我需要一次又一次地单击"删除"按钮。有人能帮我一键删除多个项目吗。
提前感谢!
问题是DeleteItem函数正在更改项的索引,因此在删除第一个项后,索引i在循环中不再有效。一个好的解决方案可以是按相反的顺序迭代项目:
for (int i = m_cList.GetItemCount()-1; i>=0; i--)
{
// checking for checked items
BOOL bCheck = m_cList.GetCheck(i);
if (bCheck != 0)
{
//deleting the checked items
m_cList.DeleteItem(i);
}
}