Zitat:
Tipp: Speichere deine Instanzen in einer TObjectList<T> ab. Somit brauchst du später nicht mehr auf den Tree zuzugreifen wenn du mit den Instanzen arbeiten willst.
Habe ich zum Glück schon so.
Ich denke ich bleibe dann dabei, dass ich initial beim Programmablauf meine Daten lade, die Klasseninstanzen erstelle, in die ObjectList packe und ganz zum Schluss RootNodeCount setze.
Wenn ich im Laufe des Programms eine Instanz / Node löschen muss, mache ich das so
Delphi-Quellcode:
Function ... GetNodeByIndex(iIndex : Integer) : PVirtualNode; // Quelle: siehe unten
begin
Result := VST.GetFirst(True);
while Assigned(Result) and (vst.AbsoluteIndex(Result) <> iIndex) do
Result := Vst.GetNext(Result, True);
end;
// Was besser ist, Beitrag 7 oder 11, weiß ich nicht
// 7 : https://www.delphipraxis.net/963615-post7.html
// 11: https://www.delphipraxis.net/1220760-post11.html
procedure ...
var
Node: PVirtualNode;
begin
Node := GetNodeByIndex(2);
if Assigned(Node) then
VST.DeleteNode(Node);
end;
Damit wird auch gleich mein Eintrag aus der ObjectList gelöscht.
Danach kann ich mit meiner Prozedur ErstelleInstanz(2, True) wieder einen neuen Eintrag an Position 2 (absolut 3) hinzufügen
Delphi-Quellcode:
procedure ErstelleInstanz(InsertAtPosition: Integer = -1; SetRootCount: Boolean = True);
begin
_UserData := TUserData.Create;
_UserData.Index := _UserDataClasses.Count;
_UserData.A := 1;
_UserData.B := 2;
...
...
if InsertAtPosition > -1 then
_UserDataClasses.Insert(InsertAtPosition, _UserData)
else
_UserDataClasses.Add(_UserData);
if SetrootCount then
_VST.RootNodeCount := _UserDataClasses.Count;
end;