当前位置: 代码迷 >> PB >> 回车后可自动锁定到上一个空间的编辑
  详细解决方案

回车后可自动锁定到上一个空间的编辑

热度:42   发布时间:2016-04-29 07:20:59.0
回车后可自动锁定到下一个空间的编辑!
在PB中创建一个窗口,窗口上有各类控件,运行程序后要怎样才可以使回车后自动锁定到到下一个控件上进行操作!
------解决方案--------------------
窗体的keydwon事件,判断keycode=keyenter!
采用那个
send(handle(this),256,9,0)
似乎是这样写
------解决方案--------------------
这个估计要写在控件的自定义keydown 事件里。。。
------解决方案--------------------
自定义事件,事件ID
引用:
窗体的keydwon事件,判断keycode=keyenter!
采用那个
send(handle(this),256,9,0)
似乎是这样写

------解决方案--------------------
PB中用enter键模拟tab键的效果,网上有一种方法:

在datawindow中扩展出pbm_dwnprocessenter事件,加入代码:

Send( Handle( This),256,9,Long(0,0)) 

Return 1 

这个方法流传很广,也害了不少人,因为它只能在datawindow中使用,并且功能有限。

如果我们使用一个API调用:keybd_event就能很好的解决这个问题了。定义如下:

SUBROUTINE keybd_event(UInt bVk,UInt bScan,Long dwFlags,Long dwExtraInfo ) LIBRARY 'user32.dll'

bVk 指需要模拟的击键(9-TAB,13-ENTER,16-SHIFT,17-CTRL,91-Left Windows key,46-DEL等)

bScan 未使用 

dwflags =0 ,按下 = 2 ,释放

dwExtraInfo 附加的值,没什么用

下面在登录窗口w_login中加入这个功能,在key事件中加入如下代码:

GraphicObject which_control

which_control = GetFocus()

CHOOSE CASE TypeOf(which_control)

                  CASE CommandButton!

                            which_control.TriggerEvent(Clicked!)

                  CASE SingleLineEdit!

                            IF Key = KeyEnter! THEN

                                     keybd_event ( 9, 0, 0 , 0 ) // 按下tab 

                                     keybd_event ( 9, 0, 2, 0 ) // 释放tab 

                            END IF

END CHOOSE

RETURN 1

文本框中自行跳转,遇到按钮则模拟点击。

------解决方案--------------------
是窗体的,不是控件的!焦点是根据taborder跳转的。窗体上自定义一个事件,事件名你爱叫什么叫什么。event_id选pbm_keydown就行了。照一楼的做就是了
  相关解决方案