在vfp5.0中使用 treeview控件
来源:百度文库 编辑:神马文学网 时间:2024/04/27 19:05:47
黄明
当数据库中保存的数据之间具有层次隶属关系时(如表示各种社会组织结构的数据),就要用到能以树型结构显示并操作这类数据的控件: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 某公司的组织结构
当数据库中保存的数据之间具有层次隶属关系时(如表示各种社会组织结构的数据),就要用到能以树型结构显示并操作这类数据的控件: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 某公司的组织结构
在vfp5.0中使用 treeview控件
在Visual FoxPro中使用TreeView控件|TreeView 控件 VFP|时...
ASP.NET中TreeView控件使用小结
使用 TreeView IE Web 控件
TreeView 控件应用详解
在C#中使用属性控件添加属性窗口
VB treeview使用示例代码(从数据库中读入
vfp网-TreeView控件应用详解
Asp.Net开发]从"在 Internet Explorer 中使用 Windows 窗体控件"开始谈Smart Client
MFC中使用RICHEDIT控件常见问题
VB中 MSComm控件使用详解2
vc中edit控件使用总结
在delphi7中不使用任何第三方控件,实现放在工具栏上可拖动的xp风格菜单.
第七章 在FLTK中自定义控件
如何在fluid中添加自定义控件
ComboBox 控件在 Visual Basic 2005 中
Delphi中不使用第三方控件实现XP风格
Ajax.net中与服务器控件的交互使用
VB中MsFlexGrid控件的使用细则(收集)
C#中Property Grid(属性面板)控件的使用
在delphi中编写控件的基本方法
VB.NET ToolBar控件在实际应用中作用体现
在PPT中插入滚动“文字框”控件
Infragistics控件使用-UltraGrid