List View mehrere Einträge löschen
-
Hallo
Ich hab folgendens Problem. Ich will all meine markierten Einträge löschen, aber wie mach ich das das? Bei ListBox hab ich das so gelöst
for(int ni = ListBox1 -> Items -> Count - 1; ni >= 0; ni--) { if(ListBox1 -> Selected[ni]) { ListBox1 -> Items -> Delete(ni); } }
Nun bei ListView hab ichs so versucht
for(int ni = ListView1 -> Items -> Count - 1; ni >= 0; ni--) { if(ListView1 -> Selected != NULL) { if(ListView1 -> Selected -> Index == ni) { ListView1 -> Items -> Delete(ni); Button4 -> Enabled = false; } } }
Das Problem ist nun das ListView1 -> Selected -> Index mei Multiselect immer den Wert des erstmarkierten Werts enthält.
-
Probiers mal so:
void __fastcall TForm1::Button1Click(TObject *Sender) { for (int i=0;i<TreeView1->SelectionCount) TreeView1->Selections[i].Delete; }
-
Genauso steht's ja auch in der Hilfe zu TListView::Selected.
Wenn du den BCB6 hast kannst du TListView::DeleteSelected() verwenden. Ansonsten musst du alle Items abklappern und prüfen, ob diese selektiert sind (TListItem::Selected). Vorher holst du dir noch den SelCount, damit du beizeiten abbrechen kannst. Und wie üblich beim Löschen aus einer Liste fängst du am besten hinten an, damit der Index nicht durcheinander gerät.
-
Leider hab ich nur BCB5
habs jetzt so gelöst.
for(int ni = ListView1 -> Items -> Count - 1; ni >= 0; ni--) { if(ListView1 -> Selected != NULL) { if(ListView1 -> Items -> Item[ni] -> Selected) { ListView1 -> Items -> Delete(ni); Button4 -> Enabled = false; } } }
Tut mir leid, aber Selections und SelectionCount kenn ich nicht...
-
Mach dir nichts draus, die gibt's beim ListView auch nicht.
Wie gesagt, ich würde SelCount noch mit einbeziehen, dann brauchst du nicht z.B. alle 100 Items abzufragen wenn nur 5 markiert sind. Ausserdem sparst du die zusätzliche NULL-Prüfung.
for (int i = ListView1->Items->Count - 1, x = 0; i >= 0 , x < ListView1->SelCount ; i--) { if (ListView1->Items->Item[i]->Selected) { ListView1->Items->Delete(i); x++; } }