Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Object aus einer TList löschen

  Alt 21. Feb 2007, 11:18
Dein Delete ist falsch implementiert, denn: Das inherited Delete löscht das entsprechende Element und verkürzt die Liste. Somit gibst du mit .Free nach dem inherited Aufruf das nachgerückte Element frei. Wenn du das letzte Element löscht sogar ein nicht existierendes, etc. Damit baust du dir selber eine nicht existierende Instanz in deine Liste.

Wenn du ein Element aus einer TList haben willst ohne de Index freizugeben, dann nimm ihn einfach mit Items und weise Nil zu. Ansonsten bei TObjectList gibt es auch ein entsprechendes Extract().

Nochwas: Wenn du Nil Einträge in deiner TList (oder Nachfahre) hast, dann kannst du dir einfach mit der Methode Pack entfernen lassen.

/-------- roter Kasten --------

Das "Ja" (von Christian Seehase) ist falsch: Luckie fragt, ob er die Items nachrücken muss. Dem ist nicht so, TList macht dies. Daher trotzdem abgeschickt...

/EDIT2: Korrektur zu der Schleife: Wenn du sie brauchen tätest, was hier ja erklärterweise nicht der Fall ist, dann müsste die Schleife theoretisch nur bis Count-2 laufen, da du schliesslich mit Index+1 immer den Nachfolger holst. Diese darf somit auch nicht Count-1 überschreiten, daher nochmals -1, da dem +1 Rechnung getragen werden muss.

Delphi-Quellcode:
for i := Index to Self.Count - 2 do
  begin
    Self.Items[Index] := Self.Items[Index + 1];
  end;
  Mit Zitat antworten Zitat