Autor |
Beitrag |
majolo
      
Beiträge: 334
Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
|
Verfasst: Mo 08.07.02 17:22
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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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 
      
Beiträge: 334
Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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 
      
Beiträge: 334
Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
|
Verfasst: 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 
|
|
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: 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
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: 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; |
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: 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
Quelltext
rein hauen fg
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Mi 10.07.02 21:13
ja und wie bekommt man raus wieviel einträge markiert wurden?
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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).
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Pit
      
Beiträge: 160
|
Verfasst: Mi 10.07.02 22:25
Zuletzt bearbeitet von Pit am Sa 05.10.02 07:13, insgesamt 1-mal bearbeitet
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Pit
      
Beiträge: 160
|
Verfasst: Do 11.07.02 19:47
|
|