Hallo zusammen,
ich suche eine Möglichkleit wie ich in einer Klassenstruktur auf ein beliebiges Parent-Object zugreifen kann.
Ich habe beispielhaft folgende Klassenstruktur
Delphi-Quellcode:
TBase = class
private
FNr: Integer;
FParentObject: TObject;
public
property Nr: Integer read FNr write FNr;
property ParentObject: TObject read FParentObject write FParentObject;
end;
TMessData1 = class(TBase)
private
FMessdata1: Real;
public
property FMessdata1: Realread FMessdata1 write FMessdata1;
end;
TMessData1List = class(TObjectList<TMessData1>)
private
FParentObject: TObject;
public
property ParentObject: TObject read FParentObject write FParentObject;
end;
TMessData2 = class(TBase)
private
FMessdata2: Real;
FMessDataList1: TMessData1List;
public
property FMessdata2: Realread FMessdata2 write FMessdata2;
end;
TMessData2List = class(TObjectList<TMessData2>)
private
FParentObject: TObject;
public
property ParentObject: TObject read FParentObject write FParentObject;
end;
TGeraet = class(TBase)
private
FBezeichnung: String;
FMessDataList2: TMessData2List;
public
property Bezeichnung: Realread FBezeichnung write FBezeichnung;
end;
Die Struktur sieht also so aus
Code:
TGeraet
- TMessDataList2
- MessData2_1
- TMessDataList1
- MessData1_1
- MessData1_2
- MessData1_n
- MessData2.2
- TMessDataList1
- MessData1_11
- MessData1_12
- MessData1_1n
- MessData2.n
- TMessDataList1
- MessData1_21
- MessData1_22
- MessData1_2n
Da in allen Elementen die Eigenschaft ParentObject vorhanden ist, ist es grundsätzlich kein Problem z.B. aus MessData1_2n über
Geraet = TMessDataList2(TMessData2(TMessDataList1(ParentObject).ParentObject).ParentObject
oder über die Basisklasse
Geraet = TMessDataList2(TBase(TMessDataList1(ParentObject).ParentObject).ParentObject
Ich suche aber eine Möglichkeit, wo ich die Struktur nicht kennen muss sondern über eine Schleife so lang über ParentObject nach oben klettere bis ich die Klasse TGeraet erreicht habe. Ohne die Listen dazwischen würde es über die Basisklasse TBase gehen. Wie aber komme ich in der TObjectList weiter hoch?
Ich hoffe ich habe mich verständlich ausgedrückt. Hintergrund ist, dass die Klassenstruktur etwas komplexer ist. Z.B. könnte das Konstrukt TMessDataList1 auch direkt in TGeraet hängen.
Vielen Dank
Gerd
PS: Die Idee, in ParentObject nicht die Liste sondern die darüber liegende Klasse anzugeben, nutzt nichts. Es könnte auch sein, dass ich nicht TGeraet sondern TMessData2List suche.
-