TListBox.Items.Delete() - vorher Selektion entfernen

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Beitrag von shokwave »

@Christian: Vorwärts geb ich dir uneingeschränkt Recht.

Nur rein interessehalber (ich machs eh anders):

Code: Alles auswählen

if ListBox1.Items.Count>0 then
begin
  for i:=ListBox1.Items.Count downto 0 do
  begin
    if ListBox1.Selected(i) then
      ListBox1.Items.Delete;
  end;
end;
Sollte doch uneingeschränkt(einer, viele, alle Einträge) funktionieren?
Rückwärts hab ich nur ein Problem, wenn schon vorher Count=0 ist , aber dass muss ich eh vor jeder Aktion prüfen. Ansonsten passiert doch rückwärts nix. Ich geh ja vom letzten(Count-1) zum ersten und der ist immer 0(wenn was in der Liste drin ist). Das Count immer kleiner wird ist uninteressant, er kann i doch nicht "einholen". So lange ich keine Funktionen in der Scheife hab, die die Stringlist beeinflussen, b.B(blödes Beispiel): Item.Delete(i-2), kann doch nix passieren.
mfg Ingo

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

doch wenn die anzahl der Items kleiner ist als i-2
dann gibt es eine AV
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

@pluto

Die Anzahl der Items kann aber nicht kleiner als i werden in diesem fall.

@shokwave hast recht ich finde die while schleife immernoch eleganter aber das funktioniert.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Vorrausgetzt das sich Count Auto. Anpasst...

warum löschen per While schleife ? warum nicht mit eine For schleife ?
geht doch viel einfacher....Dann würde ich aber eine Repeat schleife stat der While schleife nehmen....
(ist für mich Logischer)
MFG
Michael Springwald

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Beitrag von shokwave »

Vorrausgetzt das sich Count Auto. Anpasst...
Braucht er doch nicht, s.o.! *g*
warum löschen per While schleife ? warum nicht mit eine For schleife ?
Es spricht in diesem Fall nichts dagegen, außer die persönlichen Vorlieben.
Dann würde ich aber eine Repeat schleife stat der While schleife nehmen....
Und was machst du wenn "Count=0"?;)
(ist für mich Logischer)
Für mich irgendwie nicht. Wo soll da der Vorteil liegen?
mfg Ingo

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Ja Stimmt auch wieder.... das müsste man abfangen bevor die schleife ausgeführt wurde..Kommt auf den Einsatzt zweck an....
MFG
Michael Springwald

Antworten