[返回]
计算机世界2000年第11期

也谈“在PB的TreeView控件中实现自动查询”

厦门巨龙软件工程有限公司 章元

  在《在PB 的TreeView 控件中实现自动查询》一文中提到的查询方法就如原文作者说的, 该程序是在TreeView 控件中逐项进行查找比较,因而执行的效率和显示结果都不是很理想。虽然PowerBuilder 的TreeView 控件没有直接提供完成查询功能的函数或方法,但是对于查询来说,节点项的句柄是非常重要的,因此可以从获得待查找节点项的句柄入手,来实现TreeView 控件的自动查询功能。原文作者也是通过用FindItem() 函数来获得节点项的句柄,再通过该句柄进一步获得节点项的详细信息。下面通过举例说明如何巧妙地获得待查找节点项的句柄,进而实现自动查询功能的。

  设计思路

  在TreeView 控件的construct 事件里,将每个节点的句柄用一动态数组记录下来,同时将要用于查询的信息对应地用一动态数组记录下来,在查询时,通过比较要查询的信息与用于查询信息的动态数组来获得数组中的元素号,再通过这个元素号就可巧妙地从记录每个节点句柄的动态数组获得待查找节点项的句柄,从而进一步获得节点项的详细信息,实现自动查询功能。
  例子

  一个窗口、一个TreeView 控件、一个SingleLine 控件、一个CommandButton 控件;

  在窗口中放入TreeView 控件、SingleLine 控件、CommandButton 控件;

  声明两个实例变量string handlename[]、long treeviewhandle[]。

  在TreeView 控件的construct 事件里写代码如下:

long ll_Costs, ll_Handle, ll_temp
ll_Costs = tv_example.InsertItemLast(0,"Costs",1)
handlename[1] = "Costs"
treeviewhandle[1] = ll_Costs
ll_Handle = tv_example.InsertItemLast
(ll_Costs,"Personal costs",1)
handlename[2] = "Personal costs"
treeviewhandle[2] = ll_Handle
ll_temp=tv_example.InsertItemLast
 (ll_Handle,"General Education",1)
handlename[3] = "General Education"
treeviewhandle[3] = ll_temp
ll_temp = tv_example.InsertItemLast
 (ll_Handle,"Entertainment",1)
handlename[4] = "Entertainment"
treeviewhandle[4] = ll_temp
ll_Handle=tv_example.InsertItemLast
 (ll_Handle,"Specific Courses",1)
handlename[5] = "Specific Courses"
treeviewhandle[5] = ll_Handle
ll_temp=tv_example.InsertItemLast
 (ll_Handle,"Powerbuilder -Begginers",1)
handlename[6] = "Powerbuilder -Begginers"
treeviewhandle[6] = ll_temp
ll_temp=tv_example.InsertItemLast
(ll_Handle,"Powerbuilder -Medium",1)
handlename[7] = "Powerbuilder -Medium"
treeviewhandle[7] = ll_temp
ll_temp = tv_example.InsertItemLast
(ll_Handle,"Powerbuilder -Advanced",1)
handlename[8] = "Powerbuilder -Advanced"
treeviewhandle[8] = ll_temp
  在CommandButton 控件clicked 事件里写代码如下:

integer i
for i = 1 to UpperBound(handlename)
  if handlename[i] = sle_1.text then
tv_example.selectitem(treeviewhandle[i])
// 该函数具有自动展开节点的功能
  return
  end if
next
messagebox('错误','所给信息没有找到!!')
  在实际的数据库应用系统开发中,通常TreeView 控件都是与DataWindow 相联系的,因而可以在TreeView 控件的construct 事件里运用循环往两个动态数组中写入信息,从而实现TreeView 控件的自动查询功能。