首页 | 社区 | 博客 | 招聘 | 文章 | 新闻 | 下载 | 读书 | 代码
亲,您未登录哦! 登录 | 注册

PB中TreeView控件的深度优化搜索算法程序

打印文章

分享到:
《计算机世界》2000年第11期B14版登载的“也谈‘在PB的TreeView控件中实现自动查询’” 一文中在实现对TreeView的搜索查询时,使用了两个数组来记录数据,然后通过查找数据元素来实现查询。而本文通过树的深度优先算法来实现TreeView的查询。

---- 由于PB的TreeView控件没有提供查找项的功能,因此本程序算是对此一缺憾的补缺。

---- 调用语法:

---- findtreeitem(tv_tree, findby, data)

---- 调用参数:

tv_tree: TreeView, 指明在tv_tree树中查找
findby: boolean, 指明查找方式
false - 按标签(Label)查找
true - 按附加数据(data)查找
data: any, 指明要查找的内容
返回值:long型。若找到,返回找到的项的Handle;
若没有找到,返回0;
若出错,返回-1


---- 程序代码如下:
public function long findtreeitem(TreeView tv_tree,
boolean findby, any data);

long ll_hdl[]
integer li_cnt
treeviewitem lt_tvi

li_cnt = 1
ll_hdl[1] = tv_tree.FindItem(RootTreeItem!, 0)
do while li_cnt > 0
if tv_tree.GetItem(ll_hdl[li_cnt], lt_tvi)
= -1 then return -1
if findby then
if lt_tvi.data = data then
return ll_hdl[li_cnt]
end if
else
if lt_tvi.label = string(data) then
return ll_hdl[li_cnt]
end if
end if
if lt_tvi.children then
li_cnt ++
ll_hdl[li_cnt] = tv_tree.FindItem(
ChildTreeItem!, ll_hdl[li_cnt - 1])
else
ll_hdl[li_cnt] = tv_tree.FindItem(
NextTreeItem!, ll_hdl[li_cnt])
end if
do while ll_hdl[li_cnt] <= 0
li_cnt --
if li_cnt = 0 then exit
ll_hdl[li_cnt] = tv_tree.FindItem(
NextTreeItem!, ll_hdl[li_cnt])
loop
loop
return 0

end function

本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )

编程爱好者论坛

本栏最新文章