ListView_DeleteItem循环只删除它应该的一半项目

时间:2013-09-13 11:35:20

标签: winapi visual-c++ activex

我在activex控件中有一个列表视图,其中包含大约700个项目。发生过滤器事件时,使用下面的代码从列表视图中删除项目,只留下一些过滤的项目。我注意到700个项目中的前300个被成功删除,但其余的则无法删除(ListView_DeleteItem返回false)。在后续调用代码时,应该删除的剩余项目的一半将被删除,然后再删除一半等。最终应删除所有项目,但是下面的循环可能需要5或6次调用。

    for (size_t rowNum=0; rowNum < toDelete.size() ; rowNum ++)
{
    bool result = ListView_DeleteItem(listCtrl, rowNum);
}

1 个答案:

答案 0 :(得分:2)

试试这个:

for (size_t rowNum=0; rowNum < toDelete.size() ; rowNum ++)
{
    bool result = ListView_DeleteItem(listCtrl, 0);
}

这是您的代码所发生的事情:

初始清单:

Item 1
Item 2
Item 3
Item 4

循环的第一遍:你删除索引为0(项目1)的项目,列表变为:

Item 2
Item 3
Item 4

循环的第二遍:你删除索引为1的项目(现在是项目3),列表变为:

Item 2
Item 4

等等。