AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Component einer ObjectList zuweisen

Ein Thema von Andreas L. · begonnen am 12. Mär 2008 · letzter Beitrag vom 12. Mär 2008
Antwort Antwort
Andreas L.
(Gast)

n/a Beiträge
 
#1

Component einer ObjectList zuweisen

  Alt 12. Mär 2008, 18:23
Abend,

ich habe eine von TComponent abgeleitete Klasse (TBookmark) mit einer Eigenschaft Folder (TFolder = ObjectList). Wenn ich jetzt im der Eigenschaft Folder einen anderen TFolder zuweise, kann ich ja im Setter der Eigenschaft das TBookmark dem TFolder zuweisen.

Folder.Items.Add(Self); Wird dabei die Instanz von TBookmark automatisch aus der vorherigen ObjectList (TFolder) entfernt? Muss dazu evtl. die Eigenschaft OwnObjects auf True sein?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Component einer ObjectList zuweisen

  Alt 12. Mär 2008, 22:00
Zitat von Andreas L.:
ich habe eine von TComponent abgeleitete Klasse (TBookmark) mit einer Eigenschaft Folder (TFolder = ObjectList). Wenn ich jetzt im der Eigenschaft Folder einen anderen TFolder zuweise, kann ich ja im Setter der Eigenschaft das TBookmark dem TFolder zuweisen.
Wozu nur einen? Wenn du im Setter von der Folder Eigenschaft bist, dann wird die eine andere TFooter zugewiesen - wie du ja am Setter Argument siehst - und somit nicht ein Bookmark sondern eine Liste (genauer: eine TObjectList). Somit musst du hier aufpassen und dir deine eigene Instanz von TFolder nicht überschreiben sondern statt dessen deine Folderliste leer machen und die Elemente der übergebenen TFolder Instanz übernehmen. Nun hast du aber das Problem, das du zwei Listen hast mit Elementen die in beiden Listen jeweils vorhanden ist. Wenn nun beide Listen OwnsObject auf true haben, dann kümmern sich beide Liste um die Freigabe einer Instanz beim Clear/Delete/Remove, etc. Dadurch hat die andere TFolder Liste aber immernoch diese Instanz und der nächste der diese (ehemalige) Instanz aus der anderen Liste holt, holt sich (unter den besten Umständen) eine blutige Nase mit EInvalidPointer, EAccessViolation, ERangeCheckError Exception, etc. Oder halt er greift damit ins Klo und es passiert nichts (GAU) und der zerschiesst Daten.

Von daher: OwnsObject auf true empfiehlt sich, da nur die Komponente weiss, wann sie die Objekte in der TFolder freigeben kann und wann nicht, da sie der Hauptabnehmer bzw. Verwender der Listenelemente ist. Dadurch hast du aber auch den Zwang, dass du im Setter von TFolder die Elemente kopierst der anderen Liste. Also jeden Eintrag als neue Klasse anlegen und die Werte der Originalen Instanz übernehmen. Die Daten sind dann kopiert und beide Listen haben die gleichen Daten, aber unterschiedliche Instanzen. Im Normalfall regelt man dies im Setter mit einem Aufruf einer Assign() Methode der TFolder, welche natürlich zuvor, wie oben beschrieben, implementiert werden muss.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:25 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