Problem mit ListBox Multiselect
-
Hallo,
ich habe ein Problem mit meiner listBox. Ich habe sie auf MultiSelect stehen und möchte nun alle Items die markiert sind löschen.
Das mache ich in einer for Schleife mit der Abfrage Selected[i].
Aber das Selected bezieht sich bei MultiSelect ja immer nur auf das Element das auch den Focus hat und so lösche ich immer nur eines.Wie kann ich das Problem umgehen?
MfG
Dieter
-
->DeleteSelected();
-
oder so:
void __fastcall TForm1::Button1Click(TObject *Sender) { for(int i=ListBox1->Items->Count-1; i>=0; i--) { if(ListBox1->Selected[i]) { ListBox1->Items->Delete(i); } } }
-
@JeGr:
Genau so habe ich es doch schon, aber er löscht nur den Eintrag der den Focus hat, also noch mit den kléinen Punkten umrahmt ist und nicht alle markierten. So wie es auch bei Selected steht.@DBler:
Die funktion kennt er nicht.
-
Bei mir werden aber alle markierten Einträge gelöscht, egal welcher den Focus hat.
Bist du dir sicher, dass du genau den gleichen Code hast?Schau dir mal genau die Schleife an!
-
Also ich habe deins kopiert. Das geht. Aber wieso???
Den einzigen Unterschied den ich hatte war das ich die schleife von vorne durchlaufen bin also so:
for(int i=0; i<ListBox1->Items->Count-1; i++)
Wieso ging das denn nicht???Vielen Dank;
-
...???...
welche bcb version?
mal in der hilfe nach TListBox::DeleteSelected() geschaut?
evtl. auch TCustomListBoxedit: da war ich wohl zu langsam,....tut mir ja so leid
[ Dieser Beitrag wurde am 18.02.2003 um 13:26 Uhr von DBler editiert. ]
-
Wenn du in deiner for-Schleife vorwärts zählst, dann passiert folgendes:
sobald du einen Eintrag löschst, rücken die anderen Einträge jeweils um eins herauf.
Somit stimmen dann die ursprünglichen Indizes nicht mehr mit den neuen überein!Hatte mal so ein ähnliches Problem... delete auf dynamic_cast -Objekte?
-
DeleteSelected gibt's erst ab BCB6.