当选中节点的同时选中父节点

1、选中某节点,其子节点被选中
procedure SetChildState(Node:TTreeNode; State:Integer);
var
  Level:Integer;
begin
  Level:=Node.Level;
  Node:=Node.getFirstChild;
  while (Node<>nil) and (Node.Level>Level) do
  begin
  Node.StateIndex:=State;
  Node:=Node.GetNext;
  end;
end;
2、选中子节点时父节点也被选中,需要用到递归
procedure SetParentState(Node: TTreeNode);
var
  Flag: Integer;
  PNode:TTreeNode;
begin
  PNode:=Node.Parent;
  if PNode<>nil then
  begin
  PNode:=PNode.getFirstChild;
  Flag:=PNode.StateIndex;
  while PNode<>nil do
  begin
  if PNode.StateIndex<>Flag then Flag:=2;
  PNode:=PNode.getNextSibling;
  end;
  Node.Parent.StateIndex:=flag;
  SetParentState(Node.Parent);
  end;
end;

原文地址:https://www.cnblogs.com/mingdep/p/2408232.html