江湖救急,大家帮忙看看这个treeview怎么用?(100分)

  • 主题发起人 主题发起人 del_man
  • 开始时间 开始时间
D

del_man

Unregistered / Unconfirmed
GUEST, unregistred user!
大家下午好了,小弟正在学习如何使用treeview控件,遇到一个问题,请看下面的代码:
TreeView1.SetFocus;
rootnode:=TreeView1.Items.AddChild(nil,'父件代码');
while not dmbom110.ClientDataSetBoh.eof do
begin
SubNode :=TreeView1.Items.AddChild(RootNode,dmbom110.ClientDataSetBoh.FieldByName('bhprod').asstring);
dmbom110.ClientDataSetBoh.Next;
end;
这段代码没有问题,生成一个这样的树
父件代码
-a
-b
-c
.
.
.
现在我想在a,b,c等各个节点 后面插入一个一个节点
即想生成:
父件代码
-a
-
-b
-
-c
-
.
.
.
我用了如下的代码:
TreeView1.items.BeginUpdate;
for i:=0 to TreeView1.items.count-1 do
begin
parentnode:=TreeView1.items;
subnode:=TreeView1.Items.AddChild(parentnode,'');
end;
TreeView1.items.EndUpdate;
可是老在第一个节点上循环生成了节点,我知道是循环出了问题,但不知道怎么办?
各位高手帮帮我这个低手吧!!!谢谢!!!!
 
其实这个问题,你最好使用嵌套,这样无数个节点/子节点都可以产生!!
 
for i:= treeview1.items.count-1 downto 0 do
 
for i:=0 to TreeView1.items.count-1 do
begin
parentnode:=TreeView1.items;
subnode:=TreeView1.Items.AddChild(parentnode,'');
end;
在循环里 当i=0 时 items指的是节点A
而当i=1时,因为你增加A的子节点,此时items[1]指的不是节点B
而是你增加的节点,依次类推,所以他会再增加A的子节点的子节点的子节点........

用yoking 的方法可以解决你的问题。

就我个人认为,生成节点时应该按绝对索引来增加
先生成根节点A,再生成A的子节点,然后生成B,再生成B的子节点.......
 
如果一定要那样就改为:
for i:=0 to TreeView1.items.count-1 do
begin
parentnode:=TreeView1.items[i+i];//改为I+I
subnode:=TreeView1.Items.AddChild(parentnode,'');
end;
 
to:wshiangdl
能不能给点源码,最好有详细注解的,谢谢了。我的邮箱h_hp@netease.com
 
每个节点都有一个绝对索引,叫做Abs。。。。,你可以查一下。然后你可以把这些值记下来
在需要往一个节点添加子节点时,你可以用上面那个唯一的索引来返回节点,然后用你的语
句添加就不会有任何问题了。这个唯一索引对于Treeview来说是非常重要的。
 
谢谢大家的帮忙,刚才的问题已经解决了,现在我又有一个问题了
我想在刚才的树中动态的增加节点,有没有判断一个节点是否被展开的事件,比方说我点a时
就可以在a中增加节点,像
-a
-a1
-a2
-a3
-b
-
-c
-
.
.
.
请大家再帮帮忙吧,谢谢了,分不够以后可以继续加
 
就是下面这个事件.

Occurs after a node is expanded.
property OnExpanded: TTVExpandedEvent;
Description
Write an OnExpanded event handler to respond when a node in the tree view is
expanded. The Node parameter specifies the node whose children are now
displayed to the user.
 
结账了,谢谢大家的热心帮忙!!!谢谢!!!!
 
后退
顶部