Delphi-Quellcode:
type
TExample = class;
TExampleList = class(TObjectList)
protected
function GetItem(Index: integer): TExample;
procedure SetItem(Index: integer; AObject: TExample);
public
property Items[index: integer]: TExample read GetItem write SetItem; default;
end;
TExample = class
private
fItems: TExampleList;
public
constructor Create;
destructor Destroy; override;
property Items: TExampleList read fItems;
end;
...
Delphi-Quellcode:
function TExampleList.GetItem(Index: integer): TExample;
begin
result := TExample(inherited GetItem(Index));
end;
procedure TExampleList.SetItem(Index: integer; AObject: TExample);
begin
inherited SetItem(Index, AObject);
end;
...
constructor TExample.Create;
begin
inherited;
fItems := TObjectList.Create;
end;
destructor TExample.Destroy;
begin
fItems.Free;
inherited;
end;
----------------------------
Delphi-Quellcode:
var
lTest: TExample;
begin
lTest := TExample.Create;
try
lTest.Items.Add(TExample.Create);
lTest.Items[0].Items.Add(TExample.Create);
// zu finden unter: lTest.Items[0].Items[0]
finally
lTest.Free;
end;
end;
Um es dann angenehmer zu machen mit der Entfernung der Items aus den Listen, könntest du in TExample dir vermerken in welcher Liste er selbst hängt oder Alternativ welcher TExample sein Parent ist. Dann könntest du im Destructor von TExample Self in der Liste vom Parent entfernen (aber aufpassen, dass du das Element nicht doppelt freigeben lässt: du befindest dich dann schon im Destructor. Also unbedingt Extract() verwenden und nicht Remove!!). Das hätte den schicken Nebeneffekt, dass du ein Element nur freigeben brauchst und müsstest es nicht mehr explizit in der Liste zu suchen um es zu entfernen.