ListView ausgewählte Zeilen löschen.



  • Ich verwende eine ListView mit 3 Spalten, die Dateinamen, Dateigrößen und Zeit enthalten. Die Eigenschaft Checkboxes ist aktiv. Nun möchte ich über einen Button die gecheckten Zeilen löschen (nicht die Daten von der Festplatte, sondern nur aus der Liste). Ich hab das Forum schon danach durchsucht, nur leider nichts brauchbares gefunden.
    Ich hatte es erst so probiert:

    void __fastcall TfrmImport::btnRemoveFromListClick(TObject *Sender)
    {
       for (int i=0; i<lviewData->Items->Count; i++) {
          if (lviewData->Items->Item[i]->Checked) {
             lviewData->Items->Delete(i);
          }
       }
    }
    

    Das funktioniert natürlich nicht wie ich feststellen musste, da sich beim löschen die Eigenschaft Count verändert. Dadurch versucht er dann Items zu löschen, die nicht mehr existieren. Wie kann ich das umschreiben das es funktioniert?



  • Hallo,

    nur inkrementieren, wenn nicht gelöscht wird, also:

    for (int i=0; i<lviewData->Items->Count; ) // <- kein i++ hier
    {
          if (lviewData->Items->Item[i]->Checked)
          {
             lviewData->Items->Delete(i);
          }
          else
          {
             i++;
          }
    }
    


  • so geht es auch wie ich grad gesehen hab:

    for (int i=0; i<lviewData->Items->Count; i++) {
          if (lviewData->Items->Item[i]->Checked) {
             lviewData->Items->Delete(i);
             i--;
          }
       }
    

    kann man auch machen oder?



  • Wenn man die Liste von letzten Eintrag zum ersten durchläuft gibts auch keine Probleme.

    for (int i=lviewData->Items->Count-1; i>=0; i--) { 
          if (lviewData->Items->Item[i]->Checked) { 
             lviewData->Items->Delete(i); 
          } 
       }
    


  • jo danke. Da haben wir ja jetzt alle Möglichkeiten durch 🙂


Anmelden zum Antworten