AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TListBox: Löschen von markierten Elementen
Thema durchsuchen
Ansicht
Themen-Optionen

TListBox: Löschen von markierten Elementen

Ein Thema von Kill0r · begonnen am 2. Apr 2006 · letzter Beitrag vom 2. Apr 2006
Antwort Antwort
Kill0r

Registriert seit: 5. Jun 2005
Ort: Zürich
50 Beiträge
 
Delphi 2010 Professional
 
#1

TListBox: Löschen von markierten Elementen

  Alt 2. Apr 2006, 01:50
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:
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;
Und hier der Quellcode von der Prozedur "DeleteFromList":
Delphi-Quellcode:
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;
Ich hoffe auf eure Hilfe, denn mein Kopf raucht so langsam

Tschüssi
Kill0r
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: TListBox: Löschen von markierten Elementen

  Alt 2. Apr 2006, 03:21
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.
  Mit Zitat antworten Zitat
Benutzerbild von Grishnak
Grishnak

Registriert seit: 15. Sep 2005
Ort: Neu-Ulm
111 Beiträge
 
RAD-Studio 2009 Arc
 
#3

Re: TListBox: Löschen von markierten Elementen

  Alt 2. Apr 2006, 03:23
Wenn du ein Element aus der Liste löschst, dann rutschen alle dahinter stehenden eine Position vor:
Code:
Pos Element
 0      A
 1      B
 2      C
 3      D
 4      E
 5      F
Nach dem Löschen vom Element mit Index 2:
Code:
Pos Element
 0      A
 1      B
 2      D
 3      E
 4      F
Nun haben alle Elemente einen um eins niedrigeren Index!

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.
Mach' etwas idiotensicher und irgendjemand erfindet einen besseren Idioten!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz