![]() |
TreeView - NodeExists Funktion ?
Moin !
Kann mir jemand sagen wie ich ein NodeExist realisieren kann? Ich habe es mal so probiert:
Delphi-Quellcode:
Aber das geht nicht.
function Node_Exists(Node : TTreeNode): Boolean;
begin Result := assigned(Node); end; Ich merke mir in einer Variable einen TTreeNode. Und die Funktion soll mit False zurück kommen wenn dieser Node nicht mehr existiert (weil gelöscht). |
Re: TreeView - NodeExists Funktion ?
Assigned prüft ja auf nil. Wenn Du den TTreeNode beim Löschen also auf nil setzt, sollte das auch gehen. Vielleicht gäbe es auch andere Möglichkeiten, aber ich habe gerade kein Delphi zur Hand, um nachzusehen.
|
Re: TreeView - NodeExists Funktion ?
Dann könnte man aber auf die Funktion verzichten und direkt assigned verwenden
|
Re: TreeView - NodeExists Funktion ?
Jepp, wobei sich "Node_Exists" aber später besser lesen lässt.
|
Re: TreeView - NodeExists Funktion ?
Hmm aber ich lösche den Knoten doch schon:
Delphi-Quellcode:
Muss ich dann den gelöschten Knoten (und ggf. seine ChildNodes) alle explizit auf NIL setzen :gruebel:
procedure Node_Delete (Node : TTreeNode);
begin if( Node = nil ) then Exit; {Free the class} if( Node.Data <> nil ) then TNodeInfo(Node.Data).Free; {Delete the node} Node.Delete; end; |
Re: TreeView - NodeExists Funktion ?
Entweder das oder mit FreeAndNil freigeben.
|
Re: TreeView - NodeExists Funktion ?
Ich würde die beiden If Anweisungen verschmelzen und auf das Exit verzichten
Delphi-Quellcode:
if Node.Data <> nil then ...
|
Re: TreeView - NodeExists Funktion ?
Moin !
Das will nicht. Selbst wenn ich das auf einen Node anwende:
Delphi-Quellcode:
Dann kriege ich bei:
procedure Node_Delete (Node : TTreeNode);
begin if( Node = nil ) then Exit; {Free the class} if( Node.Data <> nil ) then TNodeInfo(Node.Data).Free; {Delete the node} Node.Delete; Node.Free; Node := NIL; end;
Delphi-Quellcode:
Immer ein True als Ergebnis. :gruebel:
function Node_Exists(Node : TTreeNode): Boolean;
begin Result := assigned(Node); end; |
Re: TreeView - NodeExists Funktion ?
Moin !
So nachdem ich mein Löschen erweitert habe und alles auf NIL setze und auch rekursiv lösche gehts nun :-)
Delphi-Quellcode:
procedure Node_Delete (Node : TTreeNode);
begin if( Node = nil ) then Exit; while node.HasChildren do begin Node_Delete(node.Item[0]); end; //ShowMessage('Lösche : ' + Node.Text); {Free the class} if( Node.Data <> nil ) then begin TNodeInfo(Node.Data).NodeParent := NIL; Node.Data := NIL; TNodeInfo(Node.Data).Free; end; {Delete the node} Node.Delete; Node := NIL; Node.Free; end; |
Re: TreeView - NodeExists Funktion ?
Am Ende wird alles gut :mrgreen: :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 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