
软件设计与开发
数事执术计有皮用
TreeView目录构建及数据拖放的编程开发
杜娟杨玮清
(1.第六十研究所北京100141;2.国防信息学院湖北武汉430010)
摘要:PowerBuilderTreView控件可以用来构建树形目录,使程序以分层或大纳格式显示数据,也可以通过展开或新叠树节点遍历数据和更新目录结构,具有较好的实用价值。文章介绍利用PBTreeView控件构建树形目录以及实现数据拖改的相关方法。
关键调:PowerBuilder树形控件
目录结构数据拖放
中图分类号:TP319
文献标识码:A
1、TreeView分层生成数据橱形目录的方法
文章编号:1007-9416(2011)11-0148-02
TreeView控件的EditLabels属性设置为FALSE,然后通过调用函数
TreeView能够像Windows资源管理器一样多层次显示信.息关系。如一个根目录可以派生出许多个子目录,面每个子目录下可以存放多个文件等,PowerBuilder为TreeView控件提供编辑目录标识符、删除目录、展开或折选分枝以及对目录按预设规则进行排序等基本功能,同时也可通过编写PowerScript脚本来定制功能如有效检查、添加目录和拖动项目等。
虽然在程序中可以一次性生成所有层次节点,但嵌套复杂,数据检索和数据关联非常不方便。好的做法是,在程序启动时让 TreeView生成项级目录,在点击分枝节点时利用ItemPopulate事件增加对应的子项,从而避免一些不必要的处理。一般情况下,首先涨加的项层(或第一层)目录由的窗口的Open事件来完成,需添加的子项在用户要展开其子目录时利用TreeView控件的ItemPopulate 事件来检索数据库,并根据数据条目增加相应的子项。
需注意的是,ItemPopulate事件是在用户单击项目的"加号"时被触发,其前提条件是该项目的Children属性必须是TRUE。因此需对TreeView控件的Children属性进行适当的控制;在第一次展开该项目时其属性为TRUE,当增加子项后将该属性设置为FALSE
这样当再次展开该项目时就不会重复增加子项。 2、TreeView项目文本的改名
为了在应用程序的执行过程中让用户能够修改TreeView控件中项目的名称,主需要将TreeView控件的EditLables属性设置为 TRUE。这样,当用户在项目文本上单击两次之后就可以进行条目的编辑状态。
有两个事件与编辑(或修改)TreeView项且名称有关: BeginLabelEdit事件和EndLabelEdit事件其中BeginLabelEdit事件在编辑开始时发生,编写程序时可以通过配置该事件的返回值进行适当的控制:若返回值为0则允许改名,若返回值为1则禁止改名。以下是一段BeginLabelEdit事件代码,用来对TreeView项目的改名进行控制:
TreeViewItem tvi
This. Getitem(handle, tvi) If tvi.Level=2 Then
RETURN0//返回0,允许修改 ELSE
RETURN1//返回1,禁止修改 ENDIF
而EndLabelEdit事件是在编辑结束是触发,EndLabelEdit事件中的程序可以对用户的修改做拼写检查等操作。也可以将
148)万为数据
EditLabel来实现对项目名称的编辑(该函数也同样可以触发 BeginLabclEdit事件),所不间同的是,数EditLabel可能需要来自外部控件的调用,使用不直观,与我们通常在Windows下的操作习惯不同(如利用Windows资源管理器对文件或文件夹直接改名),所以,将TreeView控件的EditLabel属性设置为True,实现对
TreeView控件项目的重新命名是较好的方法。 3、数据项目的拖放编程
当建立TreeView控件后,就可以对它进行属性配置和编写--些事件脚本,实现TreeView数据项目的拖放。以下是TreeView控件拖放的属性配置和相关的触发事件:
DragAuto属性:可设置为TRUE或FALSE,若设置为FALSE,则需在BeginDrag事件申调用Drag函数
DisableDragDrop属性:其歌认配置为TRUE,这意味着用户不能进行拖效。应在其属性配置标签页中取消DisableDrag Drop复选框。
Draglcon属性:一且允许进行拖人,就需要在DragandDrop 标签页上设置Draglcon图标。
就像对于大多数控件那样,大部分处理是DragDrop事件中进行的。区别在于,TreeView控件即是源对象,又是目标对象,另外 TreeView控件为用户提供了另外两个事件用于拖放:BeginDrag事件和BeginRightDrag事件。BeginDrag事件在实际拖动过程开始时发生,该事件使开发人员能够在允许用户移动任何TreeViewItem 之前预先对该过程进行检查,面BeginRightDrag事件在鼠标右击时发生。
下面是一个关于TreeView数据拖放的例子:将文件从一个文件夹拖到另--个文件夹。在BeginDrag事件中,首先进行一次检查以确保只拖动文件,如果用户试图拖动文件夹,则取消拖动过程。
Treeviewitem Ltvi_data
This.GetItem(handle,Ltvi_data) Ir Ltvi_data.level <> 2 then
This.Drag(Cancel!) Else
Li_DragSource=handle EndIf
BeginDrag有一个名为handle的长整型句柄,该句柄是 TreeView所有项目发生动作的引用依据。调用GetItem函数生成一个TreeView项目句柄后,程序就需要判断所拖条目在TreeView中
.下转第150页