如何计算TreeView中的一个Item有多少个子孙(包括儿子,孙子,重孙子.......)?急!在线等待(30分)

  • 主题发起人 主题发起人 cb422
  • 开始时间 开始时间
C

cb422

Unregistered / Unconfirmed
GUEST, unregistred user!
如何计算TreeView中的一个Item有多少个子孙(包括儿子,孙子,重孙子.......)?
TTreeNode.Count只能返回直接的儿子的个数,如果儿子还有儿子就不行了。有哪位大侠知道
 
以下程序遍历所有子节点,包括自己,稍微改一下,计数总没问题!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls;

type
TForm1 = class(TForm)
TreeView1: TTreeView;
ListBox1: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure GetAllSubNode(SelNode:TTreeNode);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.GetAllSubNode(SelNode: TTreeNode);
var
TN:TTreeNode;
begin
ListBox1.Items.Add(SelNode.Text);
if SelNode.HasChildren then
begin
TN:=SelNode.getFirstChild;
GetAllSubNode(TN);
TN:=TN.getNextSibling ;
while TN<>nil do
begin
GetAllSubNode(TN);
TN:=TN.getNextSibling ;
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Clear ;
GetAllSubNode(TreeView1.selected);
end;

end.
 
var
tn,tn1 : TreeNode ;
i : Integer ;
begin
tn := Treeview1.Selected ; //结点
tn1 := tn.GetNext ;
while true do
begin
if tn1.Level >= tn.Level then
begin
break ;
end
else
i := i + 1 ;
end ;
ShowMessage(IntToStr(i)) ;
end ;
 
后退
顶部