当前位置: 老葡京网站娱乐 > 数据库 > PowerBuilder > 正文

pb中无限制添加Tree节点-续

时间:2008-12-01 本站整理 郭宝利

老葡京网站娱乐 www.sdguanhua.com 作者:达通兴电脑科技公司(www.study01job.com) 郭宝利

二、添加到什么位置上

接上一篇文章,我们继续讨论如何确定要添加节点的位置。这实际上是一个树型结构的遍历问题。树型结构的遍历通常使用递归程序来实现,所以本节给出一个按照内容查找,对树型结构进行遍历,如果和要查找的内容相等,则返回该节点的Handle。插入在返回后完成,使用上一篇文章中介绍的知识就可以实现。函数如下:

/*-----------------------------------------------------------------------------

* 函数名称:long wf_reader(long al_handle,string as_target)

* 函数作用:遍历树型结构,找到指定内容的节点。

* 返 回 值:节点的Handle。

* 算法描述:遍历树型结构,使用递归完成。

* 编写日期:2004.6.26

* 编 写 人:达通兴电脑科技 郭宝利

*----------------------------------------------------------------------------*/

long ll_handle

long ll_handleOld

TreeViewItem ltvi_Item

String ls_label

String ls_data

if tv_1.Getitem(al_handle,ltvi_Item)= -1 then return -1

ls_label=Trim(String(ltvi_Item.label))

ls_data=Trim(String(ltvi_Item.data))

if ls_label = as_target then

return al_handle

else

ll_handle = tv_1.FindItem(ChildTreeItem!,al_handle)

end if

 

if ll_handle > 0 then

if tv_1.Getitem(ll_handle,ltvi_Item)= -1 then return 0

ls_label=Trim(String(ltvi_Item.label))

ls_data=Trim(String(ltvi_Item.data))

if ls_label = as_target then

return ll_handle//找到了要添加的节点

else

return wf_reader(ll_handle,as_target)

end if

else

ll_handleOld = al_handle

ll_handle = tv_1.FindItem(NextTreeItem!,ll_handleOld)

do while ll_handle < 0

ll_handle = tv_1.FindItem(ParentTreeItem!,ll_handleOld)

if ll_handle > 0 then

ll_handleOld = ll_handle

ll_handle = tv_1.FindItem(NextTreeItem!,ll_handleOld)

else

ll_handle = tv_1.FindItem(NextTreeItem!,ll_handle)

if ll_handle < 0 then

return -1

end if

end if

loop

if tv_1.Getitem(ll_handle,ltvi_Item)= -1 then return -1

ls_label=String(ltvi_Item.label)

ls_data=String(ltvi_Item.data)

if ls_label = as_target then

return ll_handle//找到了要添加的节点

else

return wf_reader(ll_handle,as_target)

end if

end if

return ll_handle

调用举例。比如,我们在窗口上放置单行编辑器sle_1,用户输入内容,点击命令按钮‘查找’时调用上面的函数:

String ls_find

long ll_handle

ls_find = Trim(sle_1.text)

ll_handle = tv_1.FindItem(RootTreeItem!, 0)

if ll_handle > 0 then

ll_handle = wf_reader(ll_handle,ls_find)

if ll_handle > 0 then

MessageBox('找到',string(ll_handle))

else

MessageBox('','没有找到')

end if

end if