打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
在vfp5.0中使用 treeview控件
在vfp5.0中使用 treeview控件

黄明

  当数据库中保存的数据之间具有层次隶属关系时(如表示各种社会组织结构的数据),就要用到能以树型结构显示并操作这类数据的控件:treeview。

  treeview是windows95/98下的activex控件,包含在comctl32.ocx中,当安装了vfp5.0或vb5.0专业版中的activex后,可以在windows的system子目录下找到。

  下面通过一个简单的例子介绍如何在vfp中方便地使用treeview。

  先建立一个表,用来表示图1所示的结构。表结构及数据如表1。

  单位代码字段按路径代码法编码,其中包含着数据库中各记录对应节点在树中的位置信息(也即保存着各记录之间的层次隶属关系)。这种代码能表示出从根节点到指定节点的整个路径。图1所示为一个三层结构,图中的数字即是相应单位的路径代码。

  现在创建一个新表单,把tree.dbf添加到表单的数据环境中。添加treeview控件,添加方法:在表单控件工具栏中选择ole容器控件,添加到表单中,出现insert object对话框后,选insert control,在列表框里选microsoft treeview control。

  给表单添加一个新方法:myparentnode用于获得树中某节点父节点的键值。

  parameters nodecode

  if right(nodecode,1)=′0′

  return ′000′

  else

  return left(nodecode,2)+′0′

  endif

  在treeview的init事件里加入下面的程序,用tree.dbf中的记录填充treeview:

  select tree

  go top

  this.nodes.add(,,′k′+tree.单位代码,rtrim(tree.单位名称))

  skip

  do while .not. eof()

  this.nodes.add(′k′+thisform.myparentnode(tree.单位代码),4,′k′+tree.单位代码,rtrim(tree.单位名称))

skip

  endd

  go top

  程序中add是nodes的方法,与列表框的additem方法类似,用于向treeview中添加节点。

  为了实现treeview控件的导航功能(操纵数据库),需要在treeview的nodeclick事件中加入下面的程序:

  lparameters node

  select tree

  go top

  locate for tree.单位代码==substr(node.key,2)

  thisform.refresh

  在表单中添加一个编辑框,设置controlsource=′tree.概况′

  现在运行表单,展开所有非叶节点,可以看到treeview已经按图1所示的层次关系显示出了表tree.dbf中的记录。单击treeview各节点,编辑框中的内容随着不同的节点而改变,说明上面的程序已使treeview具备了导航功能。

  为了让读者能更好地在vfp中使用treeview控件,这里再介绍几点使用技巧和注意事项。

  在vfp中使用treeview时,应充分利用node的key属性。可以为节点指定有意义的字符串作为它的key值,这正是存放路径代码的好地方。但要注意,不能用纯数字字符串作为node的key属性的值。否则treeview将产生无效键值错误。因此,上面的程序中在引用key属性的地方都合并了一个字符“k”。

  当树中的节点比较多时,应对各节点排序,以方便用户检索。方法是设置各节点的sorted属性为真。

  编程时,还可以利用treeview的imagelist属性和node的image属性为性质不同的节点指定不同的图标,美化用户界面。如在上面的例子中,向表单里添加一个imagelist控件(方法同添加treeview),在其属性对话框里插入四个图标,设置各图标的key属性分别为:root、open、close、leaf。在上述treeview的init事件里追加下面的代码:

  this.imagelist=thisform.oleimage.object

  this.nodes(1).image=′root′

  for imagelist=2 to this.nodes.count

if this.nodes(imagelist).children>0

this.nodes(imagelist).image=′close′

this.nodes(imagelist).expandedimage=′open′

else

this.nodes(imagelist).image=′leaf′

endi

  endf

  与在vb中使用imagelist不同,当向vfp表单加入一个imagelist后,在设计状态下,并不能直接设置treeview的imagelist属性。解决的办法是在程序中指定treeview的imagelist属性,并应设置为包容imagelist的ole容器控件的object。

表1 表名为tree.dbf
单位名称
(字符型,长度20)
单位代码
(字符型,长度3)
概况
(备注型)
总公司 000 memo
分公司1 010 memo
人事部 011 memo
开发部 012 memo
生产部 013 memo
分公司2 020 memo
人事部 021 memo
经营部 022 memo




  图1 某公司的组织结构

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
在工作表左侧中添加TreeView控件
[C#][控件]高级控件
C#—TreeView控件【转】
VB Treeview控件
TreeView控件概述、属性与方法
树形目录功能如何用VB编程实现?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服