第二十一讲 深入窗体 利用PB事件实现ENTER代替TAB跳转 打印本页  
 
  利用PB事件实现ENTER代替TAB跳转
  在前面几讲,我们已经简单探讨了PB的窗口画笔和数据窗口画笔。从这一讲起,我们将深入理解窗口,进一步和大家体会数据窗口的奥妙,并用例子来说明它。
  熟悉Windows编程的人员都知道,Windows的API为程序员提供了大量的消息,约有200多个。在PowerBuilder中,系统将每个Windows消息作为事件传递给程序员处理,并且为大多数普通的事件提供了缺省处理。
  PowerBuilder在语句描绘器中给每一个标准的控件设定了一些常用事件,一般的编程人员基于这些事件就基本可以完成常见的操作。
  但是现在我们还是要如何自定义一个新的事件,并将这个新的事件与WINDOWS消息对应起来,用于完成一个特殊的操作。这就是我这一讲要讲的例子:利用PB事件实现ENTER代替TAB跳转
  [插入video_22]
  建立一个新的Application对象。
  作一个Datawindow,采用外部数据源,并且用FreeFrom格式。加入五个数据字段,存储为d_input。
  新建一个窗口,并在Window对象中加入控件。
  加入一个CommandButton,命名为cb_add,设置它的text为“&A增加”。在它的Clicked事件中添加程序:
  dw_input.reset()
  dw_input.insertrow(0)
  dw_input.setcolumn(1)
  dw_input.setrow(1)
  dw_input.setfocus()
  再增加一个CommandButton,命名为cb_exit,设置它的text为“&X退出”。在它的Clicked事件中添加程序:
  close(parent)
  增加一个用户自定义事件,打开cb_exit的Script,点击Declare菜单中的User Events,定义一个自定义事件起名为ue_dwnkey,选择Windows的消息ID为pbm_dwnkey。单击确定。
  加入如下程序:
  if key=keyenter! Then
  this.triggerevent(clicked!)
  end if
  实现同一个窗口下的多个输入列之间聚焦的转换用键入回车键来实现跳转:
  在d_input DataWindow控件中定义定义名为ue_dwnprocessenter事件,以捕捉用户在DataWindow中输入的回车,并对其应实现的功能进行转换。它的消息ID是pbm_dwnprocessenter。这个事件表示在datawindow控件中按下回车键时,将发生的事件。
  在ue_dwnprocessenter事件中加入以下程序:
  Send(Handle(this),256, 9,0)