请问怎样用回车键实现光标移动?

mycmos 2003-09-03 06:35:55

各位大侠,默认的情况是只能用TAB键。可是如果想用回车键代替,怎么在程序中实
现?
...全文
165 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
langel 2003-11-16
  • 打赏
  • 举报
回复
send(handle(this),256,9,long(0,0))
udb992002 2003-11-13
  • 打赏
  • 举报
回复
新建一个事件,event id 为pbm_processenter,在事件中写:
send(handle(this),256,9,long(0,0))
return 1
TGWall 2003-11-13
  • 打赏
  • 举报
回复
1、对于控件之间的焦点轮换:
在某个控件中新建一个事件如ue_keyenter,然后在Event ID中选择Pbm_keydown,代码则如下
if keydown(keyenter!) then
  control.setfocus()//control为你想要将焦点转移到其上的控件
end if
2、对就数据窗口中的焦点转换,就用send()(楼上的各位已经说过了)
yewenlin 2003-11-13
  • 打赏
  • 举报
回复
一、先在global external functions 中定义一个API:subroutine keybd_event(uint bvk,uint bscan,long dwflags,long dwextrainfo) library 'user32.dll'
二、如果是数据窗口:请定义一个用户事件ue_dwnkey(可以另用名字),ID为:pbm_dwnkey。 添下列代码
如果是普通窗口:请在key事件中添加下列代码
代码如下:
////让回车键实现tab键功能
//integer vk_tab = 09 //tab键
//
//if key = keyenter! then //处理回车键
// keybd_event(vk_tab,0,0,0)//按下tab键
// keybd_event(vk_tab,0,2,0)//释放tab键
// return 1
//end if

//左右箭头选择列功能,并且回车键实现tab键功能
integer vk_tab = 09 //tab键
integer vk_shift = 16 //shift键

if key = keyleftarrow! then //左键
keybd_event(vk_shift,0,0,0)//按下shift键
keybd_event(vk_tab,0,0,0)//按下tab键
keybd_event(vk_tab,0,2,0)//释放tab键
keybd_event(vk_shift,0,2,0)//释放shift键
return 1
end if

if key = keyrightarrow! or key = keyenter! then //左键
keybd_event(vk_tab,0,0,0)//按下tab键
keybd_event(vk_tab,0,2,0)//释放tab键
return 1
end if

eaglechou 2003-09-11
  • 打赏
  • 举报
回复
就是用send()
简单
kmxh 2003-09-09
  • 打赏
  • 举报
回复
send ( handle (this) , 256 , 9 , 0 )
快乐虎 2003-09-06
  • 打赏
  • 举报
回复
例如选择数据窗口的属性,在函数中自定义一下ue_enterkeypress()
send(handle(this),256,9,long(0,0))
return 1
liujiaqiang 2003-09-06
  • 打赏
  • 举报
回复
来晚了...
neu724 2003-09-06
  • 打赏
  • 举报
回复
也可以在其中设置一个整型的实例变量,用来在多个控件之间进行选择。
neu724 2003-09-06
  • 打赏
  • 举报
回复
在窗口的key事件中:
if key = KeyEnter! then
  control.setfocus()//设置控件的焦点
end if
好像可以,试试。
119119 2003-09-04
  • 打赏
  • 举报
回复
昏。就是在事件定义中,你选择KEYBD_EVENT事件。
eltoro 2003-09-04
  • 打赏
  • 举报
回复
在PB中实现ENTER跳转的几种方法(转)


/******************************************************
在使用PowerBuilder开发的应用软件时,各控件及数据窗口列之间的转换基本上是使用Tab键或鼠标来实现的。而对于一些长期使用基于字符终端的用户来说,特别是对频繁、大量处理数据的用户来说,每输完一笔数据,必须通过Tab键或鼠标跳转到下一列中,非常不方便,而采用Enter(回车)键更便于数据的操作。这里,笔者介绍几种将Enter键用作Tab键的方法:
  1.在数据窗口中进行列的跳转 在用户具体操作时,数据窗口中Enter键的使用频率最高。在设计时,先打开窗口对象,用鼠标点中要用Enter键实现跳转的数据窗口,选择菜单项“Declare|User Event”,为该数据窗口控制定义用户自定义事件。例如有一个窗口,窗口名为w_sales,内置数据窗口dw_sales,数据窗口有五个列,列名分别为column1~column5,定义用户自定义事件为“dw_sales_key”,对应PowerBuilder事件号为pbm_dwnkey。定义好事件后,用鼠标点数据窗口工具栏图标Script,在select event 中选取事件dw_sales_key进行编程,语句如下:
if keydown(keyenter!)then//判断按下的是否是Enter键
choose case 1ower(dw_sales.getcolumnname())
case "column1"
        dw_sales.setcolumn("column2")
case "column2"
dw_sales.setcolumn("column3")
case "column3"
dw_sales.setcolumn("column4")
case "column4"
dw_sales.setcolumn("column5")
end choose
end if
  编程完后,编译保存,再调用该窗口时,其数据窗口内的列可以用Enter键实现跳转。当然,定义Enter键时最好与Tab键的跳转次序一致。其中Tab键的跳转次序可以通过定义数据窗口菜单栏的“Design|Tab Order”项进行定义。当然,也可以不定义用户自定义事件,而直接在数据窗口的ItemChanged事件下写入如下语句:
int i
i=dw_sales.getcolumn()
if keydown(keyenter!) and i< 6 then
dw_sales.setcolumn(i+1)
end if
也可实现数据列之间的跳转。注意,以上均是基于数据插入状态而言的。而对数据查询就另当别论了,按上面的语句进行编程,在查询时,按回车键,光标会往下跳,而不是按行逐列查询,这主要是系统定义Tab键时,认定回车时列号不变,而行号递变,故用上面的方法会引起错位。若要完全替代Tab键功能,还必须做其它方面的工作。在上面的两种方法中,前者语句太长,而后者必须为当前列值有所改变时,按Enter键才能跳转。为此,可采取另一种方法:定义用户自定义事件,其中事件号为pbm_dwnprocessenter,该事件编程语句为:
  int i
  i=dw_sales.getcolumn()
  dw_sales.setcolumn(i+1)
  就可实现跳转功能,同时又避免出现以上问题。
  2.窗口中各控件之间的跳转 在窗口中,由于各控件的类型不一样,设置跳转就相对复杂一些。读者可以通过按Enter键后焦点的移动来设置各控件的跳转。如果各控件是同类型的,情况就好办得多。这里,笔者举一个例子:窗口仍然为w_sales,上面有五个Commandbutton控件,分别为cb_1~cb_5,在窗口事件key中编写以下语句:
  graphicobject i
  int j=0
  i=getfocus()
  if keydown(keyenter!)then
    if j=1 then
     j=0
     return
    end if
    post (handle(I),256,9,0)
    j=1
  end if
  这样,在运行该窗口时,按下Enter键,就可以实现该五个控件之间的跳转。若要在数据窗口中录完最后一个列值,按Enter键跳转到控件上,可以在笔者举的第一个例子中增加以下语句:
  case"column5"
     setfocus(cb_1)
即可。

eminena 2003-09-04
  • 打赏
  • 举报
回复
请大力给一个通用解决方案!
mycmos 2003-09-03
  • 打赏
  • 举报
回复
keybd_event?是什么呀,没看懂,急!
欣萱好米 2003-09-03
  • 打赏
  • 举报
回复
自己在key事件中定義,前不久有同樣的問題
我這里的代碼你用不了﹐但是思路一樣
GRAPHICOBJECT cb_control
cb_control=GETFOCUS()

CHOOSE CASE KEY
CASE KEYRIGHTARROW!
IF TYPEOF(cb_control)=COMMANDBUTTON! THEN
keybd_event(9,0,0,0)
keybd_event(9,0,2,0)
END IF
CASE KEYDOWNARROW!
choose case typeof(cb_control)
case dropdownlistbox!
case else
keybd_event(9,0,0,0)
keybd_event(9,0,2,0)
end choose
CASE KEYLEFTARROW!
IF TYPEOF(cb_control)=COMMANDBUTTON! THEN
keybd_event(16,0,0,0)
keybd_event(9,0,0,0)
keybd_event(16,0,2,0)
keybd_event(9,0,2,0)
END IF
CASE KEYUPARROW!
keybd_event(16,0,0,0)
keybd_event(9,0,0,0)
keybd_event(16,0,2,0)
keybd_event(9,0,2,0)
CASE KEYENTER!
choose case typeof(cb_control)
case COMMANDBUTTON!,PictureButton!
cb_control.TRIGGEREVENT(clicked!)
case DATAWINDOW!
// case checkbox!
case else
keybd_event(9,0,0,0)
keybd_event(9,0,2,0)
end choose
END CHOOSE

604

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 控件与界面
社区管理员
  • 控件与界面社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧