动态打开窗口

时间:2022-03-16 17:47:51
描述:做了几个类似的窗口(w_ypcx_1,w_ypcx_2),点击窗口上的某一控件(sle_1),弹出都是用同一个虚拟键盘窗口(w_keyboard),然后点击虚拟键盘用于查询条件输入,输入的内容都在w_ypcx_1上,也就是输入事件这样写
w_ypcx_1.sle_1.text = w_ypcx_1.sle_1.text + upper(ls_name)

问题:这段代码能不能动态?如:
w_ypcx_2.sle_1.text = w_ypcx_2.sle_1.text + upper(ls_name)

9 个解决方案

#1


几个类似窗口可以用继承来做,
弹出同一个窗口返回输入的值,可以用CloseWhithReturn()函数。

#2


window lw_ypcx1,lw_ypcx2

open(lw_ypcx1,'w_ypcx')
open(lw_ypcx2,'w_ypcx')

#3


window lw_ypcx1,lw_ypcx2

openwithparm(lw_ypcx1,'w_ypcx','标识1')
openwithparm(lw_ypcx2,'w_ypcx','标识2')

这样写更好一些

#4


引用 1 楼 smilysoft 的回复:
几个类似窗口可以用继承来做,
弹出同一个窗口返回输入的值,可以用CloseWhithReturn()函数。

逻辑上改变了一下,嗯,可以实现。但我想在虚拟键盘上点击,w_ypcx_1就能实时的有输入的字符显示出来。

#5


引用 3 楼 xiajinxian 的回复:
window lw_ypcx1,lw_ypcx2

openwithparm(lw_ypcx1,'w_ypcx','标识1')
openwithparm(lw_ypcx2,'w_ypcx','标识2')

这样写更好一些
可能我标题取错了,以致您理解有误。我想实现w_keyboard的输入事件能动态实现,如贴的代码。

#6




w_ypcx_1.sle_1.text = w_ypcx_1.sle_1.text + upper(ls_name)

动态生成实现不了,你可以这样

w_ypcx_1 lw_data

if isvalid(w_ypcx_1) then
   lw_data = w_ypcx_1
elseif isvalid(w_ypcx_2) then
   lw_data = w_ypcx_2
......
end if

lw_data.sle_1.text = lw_data.sle_1.text + upper(ls_name)

#7



为w_keyboard声明一个实例变量如singlelineedit isle
然后在调用键盘时赋值,如:w_keyboard.isle=w_ypcx_2.sle_1
在输入时向这个控件发送消息,如:send(handle(isle),按键,?,?)

#8


第二次看这个帖子,好像明白楼主的意思啦

楼主是想两个窗口之间实时的传送数据吧?

如果两个窗口都开着的话,无法通过closewithreturn传送信息的。

刚试验了一下,楼主的代码,
w_keyboard 里可以下代码直接更改  w_ypcx_1.sle_1.text 值的,
也就是你自己的代码就可以实现你的目的

#9


zhangyangziwo说的应是楼主的意思了
//在对应窗口的控件事件中分别写
openwithparm(w_keyboard,'w_ypcx_1')
////////////
openwithparm(w_keyboard,'w_ypcx_2')
////////////
//在w_keyboard的open事件中接收标志,保存在局部变量中,is_bz
////////////
is_bz = Message.StringParm
////////////
//输入事件可通过局部变量中,is_bz进行区分
////////////
if is_bz ='w_ypcx_1' then
w_ypcx_1.sle_1.text = w_ypcx_1.sle_1.text + upper(ls_name)
end if 
if is_bz ='w_ypcx_2' then
w_ypcx_2.sle_1.text = w_ypcx_2.sle_1.text + upper(ls_name)
end if 



#1


几个类似窗口可以用继承来做,
弹出同一个窗口返回输入的值,可以用CloseWhithReturn()函数。

#2


window lw_ypcx1,lw_ypcx2

open(lw_ypcx1,'w_ypcx')
open(lw_ypcx2,'w_ypcx')

#3


window lw_ypcx1,lw_ypcx2

openwithparm(lw_ypcx1,'w_ypcx','标识1')
openwithparm(lw_ypcx2,'w_ypcx','标识2')

这样写更好一些

#4


引用 1 楼 smilysoft 的回复:
几个类似窗口可以用继承来做,
弹出同一个窗口返回输入的值,可以用CloseWhithReturn()函数。

逻辑上改变了一下,嗯,可以实现。但我想在虚拟键盘上点击,w_ypcx_1就能实时的有输入的字符显示出来。

#5


引用 3 楼 xiajinxian 的回复:
window lw_ypcx1,lw_ypcx2

openwithparm(lw_ypcx1,'w_ypcx','标识1')
openwithparm(lw_ypcx2,'w_ypcx','标识2')

这样写更好一些
可能我标题取错了,以致您理解有误。我想实现w_keyboard的输入事件能动态实现,如贴的代码。

#6




w_ypcx_1.sle_1.text = w_ypcx_1.sle_1.text + upper(ls_name)

动态生成实现不了,你可以这样

w_ypcx_1 lw_data

if isvalid(w_ypcx_1) then
   lw_data = w_ypcx_1
elseif isvalid(w_ypcx_2) then
   lw_data = w_ypcx_2
......
end if

lw_data.sle_1.text = lw_data.sle_1.text + upper(ls_name)

#7



为w_keyboard声明一个实例变量如singlelineedit isle
然后在调用键盘时赋值,如:w_keyboard.isle=w_ypcx_2.sle_1
在输入时向这个控件发送消息,如:send(handle(isle),按键,?,?)

#8


第二次看这个帖子,好像明白楼主的意思啦

楼主是想两个窗口之间实时的传送数据吧?

如果两个窗口都开着的话,无法通过closewithreturn传送信息的。

刚试验了一下,楼主的代码,
w_keyboard 里可以下代码直接更改  w_ypcx_1.sle_1.text 值的,
也就是你自己的代码就可以实现你的目的

#9


zhangyangziwo说的应是楼主的意思了
//在对应窗口的控件事件中分别写
openwithparm(w_keyboard,'w_ypcx_1')
////////////
openwithparm(w_keyboard,'w_ypcx_2')
////////////
//在w_keyboard的open事件中接收标志,保存在局部变量中,is_bz
////////////
is_bz = Message.StringParm
////////////
//输入事件可通过局部变量中,is_bz进行区分
////////////
if is_bz ='w_ypcx_1' then
w_ypcx_1.sle_1.text = w_ypcx_1.sle_1.text + upper(ls_name)
end if 
if is_bz ='w_ypcx_2' then
w_ypcx_2.sle_1.text = w_ypcx_2.sle_1.text + upper(ls_name)
end if