作者:达通兴电脑科技公司(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