同一个界面上
我放了一个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消息,所以直接是得不到的,想其他办法吧;
二、你指的金额转换是写成全局函数的吧,那样数据窗口的每次重绘(加载、新增、删除、检索等引起的)都会调用的,这个避免不了;