如何取得treeview某节点下的所有子孙节点

解决方案 »

  1.   

    treeview中一个子树的深度和结点数量的方法和代码 procedure TForm1.Button2Click(Sender: TObject);
    type
       Nodesum=record
         Node:TTreenode; //结点
         Layer:Integer;  //所在层
         end;
    var
      a:array of Nodesum;
      Node:TTreenode;
      Depth,i,j:Integer;
    begin
      Depth:=0;
      i:=0;
      j:=0;
      Listbox1.Items.Clear;
      Setlength(a,Treeview1.Items.Count);
      Node:=Treeview1.Selected;  //使顶结点为您所选择的结点
      a[i].Node:=Node;
      a[i].Layer:=0;
      while a[i].Node< >  nil do
        begin
            Node:=a[i].Node.Getfirstchild;//取其第一个子结点
            while Node < >  nil do
               begin
                 j:=j+1;
                 a[j].Node:=Node;
                 a[j].Layer:=a[i].Layer+1; //此结点所在的层数
                 Node:=Node.GetNextSibling;
               end;//如此循环,以取出此层所有结点
        i:=i+1;
      end;
      i:=0;
     while a[i].node< > nil  do
         begin
          if a[i].Layer> Depth then
             Depth:=a[i].Layer;//求最大的层数,即子树深度
          listbox1.Items.Add(a[i].Node.Text);
          i:=i+1;
         end;
     If a[0].Node< > nil  then
      begin
        listbox1.Items.Add('子树结点共有: '+inttostr(i-1));//不含最上层结点
        listbox1.Items.Add('了树深度为: '+inttostr(Depth));
      end
     else
        listbox1.Items.Add('您没选择任何结点');//如果没选择任何结点则显示此句 end;