![]() |
TListBox: Löschen von markierten Elementen
Hi!
Ich habe mal wieder ein Problem. Ich denke es ist eher ein Denkfehler von mir ^^ Also kommen wir zur Sache: Ich habe eine TListBox in der ich mehrere Elemente, welche markiert sind, löschen möchte. Leider funktioniert das nicht wirklich, das heisst es gibt eine Exception mit einem EListError der lautet: "Listenindex überschreitet das Maximum (3)" Ich versuche das Löschen über folgenden Code:
Delphi-Quellcode:
Und hier der Quellcode von der Prozedur "DeleteFromList":
procedure TfrmMain.btnDeleteClick(Sender: TObject);
var index: integer; begin for index := 0 to listSource.Count-1 do begin if listSource.Selected[index] then begin DeleteFromList(index); end; end; end;
Delphi-Quellcode:
Ich hoffe auf eure Hilfe, denn mein Kopf raucht so langsam :roteyes:
procedure DeleteFromList(id: integer);
var pic: integer; begin if not (id = -1) then begin for pic := id to frmMain.listSource.Count-2 do begin Image[pic] := Image[pic+1]; end; frmMain.listsource.Items.Delete(id); SetLength(Image,frmMain.listsource.Count); end; if frmMain.listsource.Items.Count = 0 then begin frmMain.btnDelete.Enabled := false; end; end; Tschüssi Kill0r |
Re: TListBox: Löschen von markierten Elementen
1. DeleteSelected als Methode von der TListBox mal anschauen
2. Immer von Count abwärts zählen, da die For Schleifen ihre Start- und Endwerte nur einmalig vor dem ersten Durchlauf ermitteln. Das bedeutet die For Schleife rennt immer durch alle Elemente durch, die die ListBox zu Anfang hatte. |
Re: TListBox: Löschen von markierten Elementen
Wenn du ein Element aus der Liste löschst, dann rutschen alle dahinter stehenden eine Position vor:
Code:
Nach dem Löschen vom Element mit Index 2:
Pos Element
0 A 1 B 2 C 3 D 4 E 5 F
Code:
Nun haben alle Elemente einen um eins niedrigeren Index!
Pos Element
0 A 1 B 2 D 3 E 4 F Wenn du also z.B. Element 2 ("C"), 5 ("E") und 3 ("D") löschen willst, dann solltest du immer das Element mit dem höchsten Index zuerst löschen: zuerst 5, dann 3 und dann 2. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz