RSS
热门关键字:
当前位置 : 主页>嵌入式开发>VxWorks>列表

PB6.5中TreeView控件使用技巧

来源:我要研发网 作者: 时间:1970-01-01 点击:



PowerBuilder中reeView 控件为树状游览,类似于WINDOWS资源管理器,其特点是信息项呈树状层次结构,能更清晰地表现主、细目关系 ,操作非常方便。在应用中可将其与DataWindow 配合使用, 一个提供信息分类体系,一个提供具体信息,达到珠连碧合奇妙效果。它特别适用于多级信息分类检索, 是多级菜单所无法比似,它表现形式深受程序设计人员和广大用户喜爱,在许多应用软件中都能看到她英姿。

  在PowerBuilder下,TreeView 控件应用较其它控件要复杂得多,刚接触它时往往有些不知所措。但如果将它机理搞清楚,掌握它也不是很难事。下面我结合长白公司图书分类检索实例,把TreeView 控 件使用方法和大家探讨一下。

  一、应用TreeView 控件一般步骤

  1、 建立一个应用,并设好与数据库接口,这是操作数据库前提。

  2、 在应用中建一应用窗口W_1,在其上加入二个名为dw_3和dw_4datawindow控制对象和一个名为TV_1TreeView对象。

  3、 修改DW_3属性

  General:把Datawindow object name填写一个已存在名为DW_datedatawindow(注意:它与datawindow控制对象是不同),用于生成树视图项,将其Visible项设为不可见。

  4、 修改DW_4属性

  General:把Datawindow object name填写一个已存在名为DW_TSdatawindow对象,用于显示查询出具体内容。

  5、 编辑TV_1属性

  TreeView树视图项不能直接编辑,必须在Script中编写程序。

  Picture:在Picture Name中加入四个不同图标,用于代表树视图中两个层次(一、二级)、两种状态(未选、选中)。

  General:可根据具体应用设定是否选中,其中:

  Delete Items:运行中是否允许删除表项。

  Disable PragDrog: 运行中是否允许拖放表项。

  Edit Labels: 运行中是否允许单击表项来改变表项标题。

  Show Buttons:是否在表项放显示 -按钮,有示相对扩展和收缩。

  Hide Selection:当该控件失去焦点时,选中项是否以高亮度显示。

  Show Line:表项间是否加一竖线。

  Lines At Root:所有根层表项是否用竖线连接。

  Indentation:子表项相对于父表项向右缩进度。

  6、 编写TV_1Script

  这里是TreeView控件关键,也是难点。

  二、TreeView 控件信息构成及创建

  树? 项TreeViewItem是TreeView 控件基本信息单位,树视图项生成一般有二种方法,一种是先生成根层视图项,再在应用中动态生成下级视图项,另一种是把全部树视图项一次和成。两种方法各有优点,请根据具体情况选用,本例中采用后一种方法。

  1、 树视图项TreeViewItem主要属性

  Label:String 型,树视图项显示信息。

  Data:Any型,树视图项内部值。

  Level:Integer型,树视图项在树视图中级别。

  Children:Boolean 型,它决定该项是否有下一层(如图中书名)。

  PictureIndex:Integer 型,该项非选中时所用图标在图标队列中编号。

  SelectedPictureIndex:Integer型,该项选中时所用图标在图标队列中编号。

  2、 生成TreeViewItem项用到函数

  InsertItemFirst():将加入项作为第一项

  InsertItemLast():将加入项作为最后一项

  InsertItem():将加入项插入到指定项后面

  InsertItemSort():按顺序放置。

  3、 TreeView常用事件

  Constructor: 该事件在控件创建时触发,可在这里构造TreeViewItem。

  Click:单击TreeViewItem项时,执行查询程序。

  Double Click: 双击TreeViewItem项时,执行查询程序。

  ItemPopulate 事件: 该事件在某TreeViewItem项首次展开时触发, 触发同时系统会将 该TreeViewItem项句柄通过参数handle 传递过来。它主要用来生成对应项下层信息项。主要用于第一种方法。

  三、 事件代码

  1、树视图控件TV_1constructor事件代码 wanqi 1999.6.28

integer li_rowcount,li_row
string li_current_dn,li_last_dn,li_current_ei,li_last_ei
//声明二个树视图实例变量
treeviewitem itvi_level_one,itvi_level_two
//long ii_h_l_one
//long ii_h_l_two
dw_3.settransobject(sqlca)//dw_3
为隐含数据窗口,存有生成树数据
li_rowcount=dw_3.retrieve()//行数
dw_3.setsort("lb,pm")
dw_3.sort()
//生成树视图各级树视图项
for li_row=1 to li_rowcount
	li_current_dn=dw_3.object.lb[li_row] 
//DW_3对象中"LB类别"
	li_current_ei=dw_3.object.pm[li_row]
 //DW_3对象中"PM品名"
	if isnull (li_current_ei) then
 li_current_ei=""
	end if
	
	if li_current_dn$#@60; $#@62;li_last_dn then 
//IF LB不与一级视图项重复
 //设置一级树视图项
 itvi_level_one.label=dw_3.object.LB[li_row]
//视图项显示信息
 itvi_level_one.level=1 //级别
 itvi_level_one.data=li_current_dn 
//视图项内部信息
 itvi_level_one.pictureindex=1 
//没选中时所用图标序号
 itvi_level_one.selectedpictureindex=3 
//选中时使用图标序号
 itvi_level_one.children=(li_current_ei$#@60; $#@62; )
//树视图是否有下一级
 ii_h_l_one=this.insertitemlast(0,itvi_level_one)
 //将项加入到一级树最后一项
	end if
 	//设置二级树视图项
 if li_current_dn$#@60; $#@62;li_last_ei then
 	if li_current_ei$#@60;$#@62;  then
 itvi_level_two.label=dw_3.object.pm[li_row]
 itvi_level_two.level=2
 itvi_level_two.data=li_current_dn
 itvi_level_two.pictureindex=2
 itvi_level_two.selectedpictureindex=4
 itvi_level_two.data=li_current_ei
 itvi_level_two.children=false
 ii_h_l_two=this.insertitemlast
(ii_h_l_one,itvi_level_two)
 //将项加入到二级树最后一项
 	 end if
 end if
	li_last_dn=li_current_dn//设比较项
	li_last_ei=li_current_ei
next
 字串3 

  2、tv_1控件clicked事件代码

string s1
treeviewitem ii
this.getitem(handle,ii)
s1=string(ii.label)

choose case ii.level
	case 1
 //过滤类别
 dw_4.setfilter("lb=" s1 "")
 dw_4.filter()
	case 2
 dw_4.setfilter("pm=" s1 "")
 dw_4.filter()
 //过滤书名
end choose 

字串6

上一篇:PB6.5在窗口刚打开动态调整Tab
下一篇:没有了
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
相关文章