Problem beim löschen markierter einträge vom listview



  • Hey ich versteh das nicht warum wir nur jedes zweites Item gelöscht bei meiner Funktion?

    int DelteItems(HWND hwnd,bool global)
    {
        if (global==true)
        {
           SendMessage(hwnd, LVM_DELETEALLITEMS , (WPARAM)0, (LPARAM) (HTREEITEM)NULL);
           includeText("Alle Items wurden gelöscht");
        }
        else
        {
            for (long i = 0; i <= ListView_GetItemCount(hwnd) ; i++)
            {
                if (ListView_GetItemState(hwnd,i,LVIS_SELECTED))
                {
                    SendMessage(hwnd, LVM_DELETEITEM, (WPARAM)(int)i, 0);
                }
            }
            includeText("Martierte(s) Item(s) wurden erfolgreich gelöscht");
        }
    }
    


  • Ich schätze mal, wenn ein Item gelöscht wird, rücken die anderen auf. Demnach solltest du "i" nicht inkrementieren, wenn ein Item gelöscht wird bzw. einfach ein "i--;".



  • Du hattest Recht so ein blöder Fehler ich hab es nun so gelöst:

    int DelteItems(HWND hwnd,bool global)
    {
        if (global==true)
        {
           SendMessage(hwnd, LVM_DELETEALLITEMS , (WPARAM)0, (LPARAM) (HTREEITEM)NULL);
           includeText("Alle Items wurden entfernt");
        }
        else
        {
            for (int i=ListView_GetItemCount(hwnd);i>=0 ; i--)
            {
                if (ListView_GetItemState(hwnd,i,LVIS_SELECTED))
                {
                    SendMessage(hwnd, LVM_DELETEITEM, (WPARAM)i, (LPARAM) (HTREEITEM)NULL);
                }
            }
            includeText("Martierte(s) Item(s) wurden erfolgreich entfernt");
        }
    }
    

  • Mod

    Eine andere Möglichkeit ist es ListView_GetNextItem zu verwendne

    int i = 0;
    while ((i=ListView_GetNextItem(hwnd,i-1,LVIS_SELECTED))!=1)
        ListView_DeleteItem(hwnd, i);
    

Anmelden zum Antworten