一次删除MFC列表视图控制框中的多个选中项



我有一个扩展样式为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);
        }
    }

最新更新