Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - ListBox Einträge löschen
majolo - Mo 08.07.02 17:22
Titel: ListBox Einträge löschen
Hab mal wieder ein kleines KOMPONENTEN Problem. Wie kann man ein oder mehrere markierte Einträge aus einer ListBox löschen?
Dank im vorraus
majolo
Christian S. - Mo 08.07.02 18:40
Hi!
Hiermit geht es einfach aber unelegant (vielleicht fällt mir noch was besseres ein):
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| VAR i, gewaehlt : INTEGER; begin gewaehlt:=ListBox1.SelCount; i:=ListBox1.Count; while gewaehlt > 0 do begin dec(i); if ListBox1.Selected[i] then begin ListBox1.Items.Delete(i); dec(gewaehlt); end; end; end; |
MfG,
Peter
majolo - Mo 08.07.02 19:38
Danke, Peter, aber leider funzt der Code nicht. Hast du was vergessen oder gibt es noch andere funktionierende Lösungen
majolo
Christian S. - Mo 08.07.02 19:51
Hi!
Habe vergessen, zu beschreiben, wie die Situation bei mir aussieht:
1. Listbox mit Namen ListBox1 (MultiSelect = true)
2. Ein Button, der den Code enthält, den ich angegeben habe.
Ich habe gerade mal getestet: ich habe den Code von der Internetseite in die Prozedur für das OnClick-Ereignis des (neu erstellten) Buttons kopiert. Nur ein "begin" und ein "end;" musste ich rausschmeissen, dann funktionierte es.
Habe ich vielleicht das Problem falsch verstanden?
MfG, Peter
majolo - Mo 08.07.02 20:39
Hi!
Du hast das Problem schon richtig verstanden. Es funktioniert jetzt. Auch hatte nur vergessen Multiselect auf True zu setzen. Jetzt klappts.
Danke
majolo :D
Chatfix - Mi 10.07.02 01:10
ich hätte das ganze in eine rückwertslaufende For-Schleife geschrieben.. dann würde es mit oder ohne multi-selct funktionieren...
wenn du den code brauchst sag bescheit
Christian S. - Mi 10.07.02 11:14
Chatfix hat folgendes geschrieben: |
ich hätte das ganze in eine rückwertslaufende For-Schleife geschrieben.. dann würde es mit oder ohne multi-selct funktionieren...
wenn du den code brauchst sag bescheit |
Hi, mich würde dieser Code schon interessieren. Geht er
alle Eintäge der Listbox durch, um zu prüfen, ob sie markiert sind?
Habe hier noch eine Ergänzung, mit der mein Code auch ohne MultiSelect funktioniert:
Quelltext
1: 2:
| if ListBox1.MultiSelect = false then gewaehlt:=1 else gewaehlt:=ListBox1.SelCount; |
Aber ohne Multiselect macht der ganze Aufwand auch nicht gerade Sinn, oder?
MfG,
Peter
Chatfix - Mi 10.07.02 19:48
also mit folgendem code kannst du alles nutzen, egal ob multi select oder nicht...
Quelltext
1: 2: 3: 4: 5:
| for I:=listbox1.items.count-1 downto 0 do begin if listbox1.selected[i] then listbox1.items.delete(i); end; |
Christian S. - Mi 10.07.02 20:29
Chatfix hat folgendes geschrieben: |
also mit folgendem code kannst du alles nutzen, egal ob multi select oder nicht...
|
Stimmt, und überprüfst bei einer ListBox mit 1000 Einträgen, von denen nur 5 makriert sind, trotzdem alle 1000! Nicht gerade optimal, oder?
Chatfix - Mi 10.07.02 20:32
vieleicht nicht optimal, aber du musst bei einer listbox immer alle überprüfen, es sei denn sie ist nicht, multiselect, dann kannst du ja noch ein
rein hauen fg
Christian S. - Mi 10.07.02 21:10
Chatfix hat folgendes geschrieben: |
aber du musst bei einer listbox immer alle überprüfen, es sei denn sie ist nicht, multiselect |
Nein, bei meinem Code musst Du ja eben
nicht alle überprüfen. Sobald Du soviele Einträge gelöscht hast, wie vorher markiert waren, beendet sich der Algorithmus.
MfG
Chatfix - Mi 10.07.02 21:13
ja und wie bekommt man raus wieviel einträge markiert wurden?
Christian S. - Mi 10.07.02 21:27
Über die Eigenschaft SelCount. Zu beachten ist dabei, dass das nur bei MultiSelect=true funktioniert. Das Problem löst die Code-Ergänzung, die ich nach meinem Hauptcode gemacht habe (mein 3. Eintrag bei diesem Topic).
Pit - Mi 10.07.02 22:25
Christian S. - Do 11.07.02 19:22
Wie hast Du die Laufzeit von LB_GETSELITEMS veranschlagt? Ansonsten scheint Deine Version wirklich die optimalste Lösung zu sein. Kennst Du ein gutes Tutorial für diese Windows-API-Befehle (sind es doch, oder?)? Ich habe mich nämlich noch nie damit beschäftigt, aber sie scheinen sehr interessante Möglichkeiten zu beinhalten.
Pit - Do 11.07.02 19:47
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!