AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TObjectList: AV wenn OwnsObject := True

Ein Thema von Luckie · begonnen am 22. Jan 2007 · letzter Beitrag vom 22. Jan 2007
Antwort Antwort
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#1

Re: TObjectList: AV wenn OwnsObject := True

  Alt 22. Jan 2007, 15:13
Zitat von Luckie:
Auch damit bekomme ich eine AV, auch wenn ich im Destruktor den parent auf nil setze:
self.Items[i].Parent := nil; Das ist irgendwie alles nichts. Ich glaube, ich bleibe doch bei meiner TList.
Du solltest auch tunlichst dem Parent mitteilen, dass sein Child nicht mehr gültig ist, nicht umgekehrt. Wenn Du control.Parent := Blubb verwendest, dann wird bei dieser Zuweisung Blubb.insertControl(control) aufgerufen, ist Blubb hier nil, nun ja, dann wird das natürlich nicht aufgerufen, aber der alte Parent bekommt davon so nichts mit. Deswegen solltest du removeControl (vom Parent aus) verwenden (denke die Methode heißt so, ist jetzt aber aus dem Kopf, lieber nochmal nachschauen!).

Am einfachsten ist es, wenn Du eine Liste von TComponentList ableitest, sagen wir mal TControlList. In dieser musst Du nur den Destruktor überschreiben und für alle Kinder vor dem Aufruf des geerbten Konstruktors dann etwas aufrufen wie:

Delphi-Quellcode:
var i: Integer;
begin
  if self.OwnsObjects and (self.Count > 0) then
  begin
    for i := 0 to self.Count - 1 do
    begin
      self[i].Parent.RemoveControl(self[i]);
    end;
  end;

  inherited destroy;
end;
Ach ja, natürlich darfst Du dann auch nur TControl-Instanzen einfügen.
  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 04:52 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