Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TObjectList Löschen (https://www.delphipraxis.net/57449-tobjectlist-loeschen.html)

Scorpion 21. Nov 2005 15:23


TObjectList Löschen
 
Hallo,

ich habe eine TObjectList, diese heisst hier Array_Knoten, diese enthält Komponenten vom Typ TImage

Jetzt will ich eine Komponente Löschen, das mache ich so:

//Erst suchen nach Komponente, der Sender steht in Variable Knoten vom typ TImage
Array_Knoten[Array_Knoten.IndexOf(Knoten)].Destroy;

Doch irgendwie setzt er den Count nicht runter:

Array_Knoten.Count ist nach der Destroy Funktion immer noch gleich, wieso ?

Gruß Nico

Muetze1 21. Nov 2005 15:38

Re: TObjectList Löschen
 
Ich liebe ja bildliche Beispiele, daher mal meins dazu, was dein Code so macht:

Stell dir vor, du hast eine Kiste mit roten Bauklötzen. Alle sind rot. Nun willst du aber eins blau machen und malst es blau an. Es ist immernoch das selbe Klötzchen was du damals in die Kiste reingetan hast, aber es ist nicht mehr rot. Und die Kiste hat das Klötzchen auch nicht rausgeschmissen sondern behält es immernoch.

Die TObjectList verwaltet nur Instanzenzeiger. Sie kümmert sich weder darum um diese gültig sind, noch ob es überhaupt Objekte sind, die da in ihr liegen. Daher bleibt der Platz für das Objekt auch weiterhin belegt - auch wenn du es freigibst. Du musst das Element aus der Objektliste rauslöschen (siehe dazu die Methode Delete()). Dabei hängt es davon ab ob und was du beim Create der TObjectList angegeben hast. Abhängig davon gibt die Liste das Element selbstständig frei beim entfernen aus der Liste oder entfernt sie einfach nur ohne die Instanz freizugeben. Näheres dazu siehe Hilfe zum Create der TObjectList.

Angel4585 22. Nov 2005 07:14

Re: TObjectList Löschen
 
In diesem Fall geht es mit
Delphi-Quellcode:
Array_Knoten.Remove(Knoten);
sogar noch simpler. Bei Delete muss man den Index ermitteln, hier geht es direkt.

Grishnak 22. Nov 2005 08:28

Re: TObjectList Löschen
 
BTW: man sollte von einem Objekt niemals den Destructor direkt (MyObject.Destroy) aufrufen, sondern immer nur MyObject.Free (oder noch besser FreeAndNil(MyObject))!


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 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