0

約 700 項目を含む ActiveX コントロール内にリスト ビューがあります。フィルター イベントが発生すると、以下のコードを使用してリスト ビューから項目が削除され、フィルター処理された少数の項目のみが残ります。700 個のアイテムのうち最初の 300 個が正常に削除されていることに気付きましたが、残りは削除できません (ListView_DeleteItem は false を返します)。後続のコードの呼び出しでは、削除する必要がある残りのアイテムの半分が削除され、さらに半分が削除されます。最終的には、削除する必要があるすべてのアイテムが削除されますが、おそらく以下のループを 5 回または 6 回呼び出す必要があります。

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

1 に答える 1

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

ループの 2 番目のパス: インデックス 1 のアイテム (現在はアイテム 3) を削除すると、リストは次のようになります。

Item 2
Item 4

等々。

于 2013-09-13T12:12:53.343 に答える