treeview的子项个数(50分)

  • 主题发起人 主题发起人 wx_zhang
  • 开始时间 开始时间
W

wx_zhang

Unregistered / Unconfirmed
GUEST, unregistred user!
TREEVIEW有3个LEVEL为0的结点,我想知道第二个结点下有多少个子项。用
TreeView1.items[1].count得到的值总是0,什么原因啊?
 
在 DELPHI6 下试了代码
Edit1.Text := IntToStr(TreeView1.Items[1].Count);
是可以的。数量与实际(6)是相符的。
 
我用的D5,读TreeView1.Items[0].Count是准确的,但取后面的两个读到的都是0。跟组件
的属性有关系吗?
 
呵呵,这个道理是这样的,如这样的树
-a1
--11
--22
-a2
--33
--44
如果你想要知道a2的子项数,用treeview1.items[2].count肯定是不正确的,因为
treeview1.items[2]其实是指a1->22,以上为例正确应该为treeview1.items[3].count
 
你可以这样得知:

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
showmessage(inttostr(Node.Count));
end;

或:

procedure TForm1.Button1Click(Sender: TObject;);
begin
showmessage(inttostr(Treeview1.Selected.Count));
end;
 
呵呵 JOBSXY 说的道理是对的,我怎么一下子没有想到;写一个函数看看行不行:
要第2个接点:
I := GetChildItemsCount(TreeView1, 2);

function GetChildItemsCount(Tree : TTreeView; Child : Word) : Integer;
var
I, J : Integer;
begin
Result := 0;
if Tree.Items.Count = 0 then exit;

J := 0;
for I := 0 to Tree.Items.Count - 1 do
begin
if Tree.Items.Level = 1 then
if Tree.Items.HasChildren then
begin
Inc(J);
if Child = J then
begin
Result := Tree.Items.Count;
exit;
end;
end;
end;
end;
 
后退
顶部