Autor Beitrag
majolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334

Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 08.07.02 18:40 
Hi!

Hiermit geht es einfach aber unelegant (vielleicht fällt mir noch was besseres ein):

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334

Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334

Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: Mi 10.07.02 19:48 
also mit folgendem code kannst du alles nutzen, egal ob multi select oder nicht...

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: 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

ausblenden Quelltext
1:
break;					


rein hauen fg

_________________
Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Mi 10.07.02 22:25 


Zuletzt bearbeitet von Pit am Sa 05.10.02 07:13, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Do 11.07.02 19:47