当前位置:首页 > PB中下拉列表使用的若干技巧
PB中下拉列表使用的若干技巧
于红 聂尚宇
摘要 对PB中下拉列表的使用方法进行了研究,并提出了几种使用下拉列表的实现方法,实践表明这些方法具有简单实用的特点。 关键词 下拉列表;动态;控件;事件;
Some Skills in the Use of DDLB of PB
Yu Hong Nie Shangyu
Department of Electronic Engineering, DFU
Abstract The use of DDLB in PB is studied and some skills are proposed. The results show that these skills are simple and practical. Key words DDLB; dynamic; control; event
随着科学技术的不断发展,计算机已经应用于社会的各个领域,相应的管理软件的编制工作显得尤为重要。现有的编程工具中,PowerBuilder是数据库管理软件设计比较理想的工具,但如何合理地选用控件和灵活地使用每一个控件,以充分发挥PB的优势,是人们在编程过程中常遇到的难题。作者对PB中的控件之一——下拉列表的使用[1]进行了研究,并提出几个灵活使用下拉列表的方法。
1 下拉列表及其相应的事件
下拉列表是在窗口中定义的一个控件,与之相应的事件如下表所示:
表1 下拉列表控件上的事件 事件名称 Constructor Destructor Doubleclicked Dragdrop Dragenter Dragleave Dragwithin Getfocus Lostfocus 触发时机 在窗口中的OPEN事件发生前触发 在窗口中的CLOSE事件发生后触发 当下拉列表控件(选中且激活)被双击时触发 当一个可拖动控件到达下拉列表控件时触发 当一个可拖动控件进入下拉列表控件时触发 当一个可拖动控件离开下拉列表控件时触发 当一个可拖动控件在下拉列表控件内部时触发 正在下拉列表控件获得焦点之前(它被选中且成为有效以前)触发。 当下拉列表控件失去焦点时触发 ①
Modified Other Rbuttondown 当下拉列表控件失去焦点,同时下拉列表控件的文本内容已被更改,且按动了ENTER或TAB时触发 当一个WINDOWS信息发生非PowerBuilder事件(例如,用户按动了鼠标中间的键)时触发 当用户在下拉列表空间中按动鼠标右键时触发 Selectionchanged 当选中下拉列表控件的某一项时触发 当选中下拉列表控件的某一项时,不仅触发Selectionchanged事件,还会触发Modified事件。
2 动态使用下拉列表
传统的下拉列表使用是静态的,它在一定程度上满足了编程的需要,但是不能满足所有需要。例如,有时希望下拉列表中的选项在程序运行过程中可以变化,这用静态下拉列表定义选项是不能实现的,这就促使人们去思考如何使用动态下拉列表。有两种情况需要使用动态下拉列表。 1)下拉列表中的选项与数据库中某列的内容相关联②
实际应用中,在对数据库表中的数据按名称进行查询时,为了减少输入量,可以将库中某列的内容(如单位名称)列在下拉列表中供用户选择,这样既可以保证选中的项目一定是库中的项目,而且不用输入汉字;又使下拉列表的使用具有一定的灵活性,动态下拉列表选项的确定必须在下拉列表被使用之前进行,可以在下拉列表所在窗口的Open事件中确定,也可以在下拉列表的Getfocus事件中确定,相应的script为 string id,ic int i-op=1
declare c1 cursor for
select hotelid from hotelid-dangan using SQLCA; open c1;
fetch c1 into: id;
do while sqlca.sqlcode=0
select p1602 into :ic from p16 where p1601=:id using sqlca; if finditem(ddlb-1,ic,1)=-1 then ddlb-1.insertitem(ic,+i-op) i-op=i-op+1 end if
fetch c1 into :id; loop
close c1; 其中,下拉列表中的项目取自数据库表hotelid-dangan 的hotelid列所对应的p16表中的p1602(即单位名称)。 2)在下拉列表的使用过程中动态增加选项[1]
下拉列表中的选项在使用过程中有可能需要随时增加一些内容,例如:在“政治面貌”一列的下拉列表中包含党员、群众、团员。在运行
过程中,发现有的人“政治面貌”为“民主党派”,此项不能从下拉列表中选择,但若“政治面貌”为“民主党派”的人很多,输入量就会增加,这时用户可能希望将“民主党派”送到下拉列表中以便于输入。处理方法:下拉列表控件定义为“可编辑”,下拉列表控件的Modified事件中编写script为 int i-file
i-file=totalitems(ddlb-1)
if ddlb-1.selectitem(ddlb-1.text,1)=0 then insertitem(ddlb-1,ddlb-1.text,i-file) end if
此种方法只能保证在一次运行过程中该项存在于下拉列表中,第二次重新进入该窗口后,下拉列表中的内容又恢复到定义时的状态。
3 在下拉列表中实现模糊查询
前述的查询方法中的选项来自于数据库,选项可能比较多,选择选项的时间也较长,解决这一问题可以通过模糊查询的方法。具体如下: 在下拉列表控件的Modified事件中编写script为 hotelcx-mc=ddlb-1.text string ic-tj long in-pos
boolean empty-ddlb=false if not (sele-modi ) then string select-str long ad-count
ad-count=totalitems(ddlb-1) ic-tj=trim(ddlb-1.text) do while ad-count>=0
ddlb-1.selectitem(ad-count) select-str=ddlb-1.text
in-pos=pos(select-str,ic-tj) if in-pos<>0 then empty-ddlb=true else
deleteitem(ddlb-1,ad-count) end if
ad-count -- loop
if empty-ddlb=false then
messagebox(“提示信息\,请重新输入!\string id-1,ic1 int i-op=1 declare c2 cursor for
select hotelid from hotelid-dangan using SQLCA; open c2;
fetch c2 into :id-1; do while sqlca.sqlcode=0
select p1602 into :ic1 from p16 & where p1601=:id-1 using sqlca; if finditem(ddlb-1,ic1,1)=-1 then ddlb-1.insertitem(ic1,+i-op) i-op=i-op+1 end if
fetch c2 into :id-1; loop close c2;
ddlb-1.text=\ setfocus(ddlb-1) else
ddlb-1.showlist=true ddlb-1.text=\ setfocus(ddlb-1) end if end if
sele-modi=false
其中:hotelcx-mc是一个shared变量,用来存放要进行模糊查询的条件;ic-tj是进行查询时用来与下拉列表中的选项进行比较的内容;in-pos用来存放每次比较的结果;empty-ddlb用来存放是否查到满足条件的单位名称,如果没有满足条件的单位,必须将下拉列表恢复到最多选项的状态;sele-modi是一个shared变量,用来屏蔽Selectionchanged事件,因为选择下拉列表中的选项后激活Selectionchanged事件,但此时不希望触发Modified事件,所以要屏蔽;select-str用来存放从下拉列表中取出的每一项;ad-count存放下拉列表中的总项数[2]。 在下拉列表控件的Selectionchanged事件中增加语句sele-modi=true(该事件中其他script代码与次数无关,故在此略去),以保证执行Selectionchanged事件中的语句之后不再执行Modified事件中的语句。另外,在窗口的Open事件中编写script为 string id,ic int i-op=1
declare c1 cursor for
select hotelid from hotelid-dangan using SQLCA; open c1;
fetch c1 into :id;
do while sqlca.sqlcode=0
select p1602 into :ic from p16 where p1601=:id using sqlca; if finditem(ddlb-1,ic,1)=-1 then ddlb-1.insertitem(ic,+i-op) i-op=i-op+1 end if
fetch c1 into :id; loop close c1;
sele-modi=false
以上程序已通过调试,有兴趣的读者不妨一试。
注释:① 侯志平. PowerBuilder高级应用技术. 北京:北京晓通网络数据库研究所, 1997
②蒋红,文平.PowerBuilder4.0/5.0事件、属性与函数.北京:北京晓通网络数据库研究所,1997
作者简介:于红: 1968年生, 女, 讲师,作者单位:大连水产学院电子工程系
大连 116023
共分享92篇相关文档