当前位置: 代码迷 >> PB >> 响应键盘操作解决方法
  详细解决方案

响应键盘操作解决方法

热度:215   发布时间:2016-04-29 09:20:31.0
响应键盘操作
同一个界面上 
我放了一个sle_1 和ddlb_1并分别 给他们自定义一个键盘事件如下(变量/事件名等都是一样)
问题:只有sle_1上的 自定义键盘事件可用
ddlb_1上的就不能用 一点反应没有
另外我还做了一函数,作用是把dw中的小写金额 变成大写的,我在调度的时候发现 这个函数不停的在转,怎么能让他只是在dw显示出数据的时候运行一次
以下是ddlb_1的 自定义键盘事件integer ls_msg
long ls_jobif key = KeyEnter! then
dw_1.visible=false//隐藏明细
dw_2.visible=true //显示发票dw
dw_2.retrieve(sle_1.text,ls_begin_date,ls_end_date,ls_begin_date1,ls_end_date1)
//printsetup()
ls_job=printopen("发票打印")
dw_2.print(ls_job,0,0)
printclose(ls_job)

ELSE
messagebox('','wwwwwwwwwwwwwwwwwwwwwwwwwwwww')
END IF

以下是sle_1的键盘事件
//小键盘模拟

ddlb_1.reset()//初始化
choose case key 
case KeyNumpad0!
sle_1.text=sle_1.text + '0'
case KeyNumpad1!
sle_1.text=sle_1.text + '1'
case KeyNumpad2!
sle_1.text=sle_1.text + '2'
case KeyNumpad3!
sle_1.text=sle_1.text + '3'
case KeyNumpad4!
sle_1.text=sle_1.text + '4'
case KeyNumpad5!
sle_1.text=sle_1.text + '5'
case KeyNumpad6!
sle_1.text=sle_1.text + '6'
case KeyNumpad7!
sle_1.text=sle_1.text + '7'
case KeyNumpad8!
sle_1.text=sle_1.text + '8'
case KeyNumpad9!
sle_1.text=sle_1.text + '9'
case KeyDecimal! //小数点模拟H
sle_1.text='H'
case KeyPageUp!
Send(Handle(this),256,38,Long(0,0)) //光标上 
  return 1 ;  
case KeyPageDown!
Send(Handle(this),256,40,Long(0,0)) //光标下 
  return 1 ;  
case KeyEnter!
string ls_tmp_cursor_date
declare cursor_year cursor for
select a.instfrom 
from ipe_linsinfo a ,IPE_CNTTYPE b, ipe_chdrinfo c,clntpf d  
where a.company='L'
and a.statcode='IF'
and a.chdrnum=:sle_1.text
and c.company='L'
and c.validflag='1'
and c.statcode='IF' 
and d.clntcoy='9' 
and d.validflag='1' 
and c.chdrnum =a.chdrnum 
and c.cownnum=d.clntnum 
and c.cnttype=b.descitem
and a.payflag='P' 
and a.instfrom >=year(CURRENT_DATE)
order by a.instfrom desc ;
open cursor_year;
do while true
fetch cursor_year into :cursor_class;
if sqlca.sqlcode = 100 or sqlca.sqlcode = -1 then
exit
end if
ls_tmp_cursor_date=mid(cursor_class,1,4)
cursor_class=ls_tmp_cursor_date//+"年度"
ddlb_1.additem(cursor_class)
loop
close cursor_year;

  // Send(Handle(this),256,9,Long(0,0)) //发送TAB键 
  // return 1 ; //取消原ENTER键的动作 
string ls_year
ls_year=string(today(),'YYYY')
ddlb_1.additem(ls_year)


cb_1.visible=false
cb_2.visible=true
cb_3.visible=true
cb_4.visible=true
cb_5.visible=true
cb_6.visible=true

ddlb_1.setfocus()

end choose



------解决方案--------------------
一、你的ddlb_1的ShowList是设置成true的吧,你可以用spy++分析得到在ShowList的时候它的实质就是两个控件,那两个控件截取了enter消息,所以直接是得不到的,想其他办法吧;
二、你指的金额转换是写成全局函数的吧,那样数据窗口的每次重绘(加载、新增、删除、检索等引起的)都会调用的,这个避免不了;
  相关解决方案