数据窗口事件处理技术

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

10.6 数据窗口事件处理技术

在PowerBuilder中,事件有两种,一种是PowerBuilder在语句描绘器中为每一个标准控件设定的一些常用事件,一般的编程人员基于这些事件就可以完成常见的操作。但是有些情况下,这些事件并不能完全满足应用程序的要求,这时,就需要使用另一种事件——自定义的用户事件。

一般的用户定义事件是与Windows消息对应的事件,这种事件是在应用程序接收到Windows消息后触发的,另外一种用户定义事件则是没有对应的事件,这类事件要由用户在程序代码中触发。

但是,数据窗口控件的自定义消息又有所不同。因为数据窗口不是标准窗口对象,因此它们所提供的消息不是标准的Windows API消息,这些消息有自己的事件。

前面10.2.2节已经对数据窗口控件的常用事件做了总结,对于用户自定义事件,如果是在代码中触发事件,使用起来也比较容易。只要在代码中适当的位置使用triggerevent函数就可以了。因此本节主要讲述如何使用由PowerBuilder数据窗口所提供的消息触发用户自定义事件。

10.6.1 数据窗口消息的含义

PowerBuilder为数据窗口提供了23种消息,为便于读者参考,下面列出了各消息的名称和功能:

● PBm_dwclosedropdown:关闭下拉式数据窗口。

● PBm_dwscrollend:在数据窗口中卷滚到最后一行。

● PBm_dwscrdlhome:在数据窗口中卷滚到第一行。

● PBm_dwscrolllineend:卷滚到当前行的行尾(水平方向)。

● PBm_dwscrolllinehome:卷滚到当前行的行首(水平方向)。

● PBm_dwnbacktabout:即将通过Shift+Tab组合键离开该控件。

● PBm_d wnchanging:控件即将被改变。

● PBm_dwndropdown:下拉列表框的下拉部分即将可见。

● PBm_dwngraphcreate:即将创建图形。

● PBm_dwnitemchangefocus:数据窗口控件中当前项的聚焦改变。

● PBm_dwnitemvalidationerror:对当前项的修改引起了一个合法性检查错误。

● PBm_dwnkey:有键被按下。使用KeyDown()处理键盘值。

● PBm_dwnlbuttondown:鼠标左键被按下。

● PBm_d wnlbuttonup:鼠标左键被松开。

● PBm_dwnmbuttonclk:鼠标中键单击。

● PBm_dwnmbuttondbclk:鼠标中键双击。

● PBm_dwnmousemove:鼠标移动。

● PBm_dwnprintmarginchange:打印边界被改变。

● PBm_dwnprocessenter:Enter键被按下。

● PBm_dwnrowchange:数据窗口中的聚焦从一行转向另一行。

● PBm_dwntabdownout:用户在数据窗口的最后一行按下了下箭头键。

● PBm_dwntabout:用户在数据窗口的最后一行或最后一列中按下了tab键。

● PBm_dwntabupout:用户在数据窗口第一行中按下了上箭头键

10.6.2 用户自定义事件的使用

熟悉了DataWindow的事件定义和PowerBuilder的数据窗口消息,就可以开发出更符合用户操作习惯的应用程序。

例如,许多最终用户习惯于按下回车键将输入焦点从当前列转移到下一列,但在Windows环境下,同一个窗口下的不同控件之间的转换是用Tab键实现的。在一个DataWindow中无论是FreeForm形式还是Tabular或Grid形式,系统默认都是使用Tab键或Shift+Tab组合键转换到下一个数据列或上一个数据列,而用户按下Enter键,系统会将聚焦转到下一条记录的第一个输入列上。这时就可以利用用户自定义事件轻易地实现按下回车键换列的功能。其具体方法如下:

首先在DataWindow中定义一个KeyEnter事件,用以捕捉用户在DataWindow中按下了Enter键,对其应实现的功能进行转换。

然后在User Events的对话框中设置Event Name为KeyEnter,Event ID为PBm_dwnprocessenter的事件,对该事件编程如下:

int CurCol

int cnt

//首先要得到当前光标所在的列数

CurCol = getcolumn()

//这里假设这个DataWindow共有6列

IF CurCol < 6 THEN

//如果当前列不是最后一列,将焦点转到下一列

setcolumn(CurCol + 1)

ELSE IF rowcount()= getrow() THEN

//如果当前列是最后一列,而且当前行是最后一行,则增加一行,并将焦点转至该行的第一列

cnt = insertrow(0)

scrolltorow(cnt)

setcolumn(1)

ELSE

//如果当前列是最后一列或者当前行不是最后一行,则将聚焦转至下一行的第一列

cnt = getrow() + 1

setrow( cnt )

scrolltorow( cnt )

setcolumn(1)

END IF

相关文档
最新文档