点击按钮把数据发送到子窗体,接着关闭父窗体的疑问
我用aardio写的两个窗体,第一段代码是父窗体的,目的是点击按钮后,把父窗体文本框的数据发送到子窗体的文本框,同时打开子窗体、关闭父窗体。目前可以实现以上功能,但是有报错:请帮我看看,请如果实在解决不了,就把错误弹出窗给禁止掉也行。谢谢!报错信息如下:---------------------------
RAW CALLBACK ERROR
---------------------------
错误行号:#14
文件::
不支持此操作: _get table
定义类型:self(namespace)
名字:'winform'
类型:null
---------------------------------------------------
调用栈:
:14: in function 'oncommand'
D:\aardio\lib\win\ui\_.aardio:749: in function 'proc'
D:\aardio\lib\win\ui\_.aardio:286: in function <D:\aardio\lib\win\ui\_.aardio:278>
: in function 'messageTranslateDispatch'
D:\aardio\lib\win\_.aardio:557: in function 'parseMessage'
D:\aardio\lib\win\_.aardio:593: in function <D:\aardio\lib\win\_.aardio:581>
(tail call): ?
我的具体代码如下:
第一段代码是父窗体的:
import win.ui;
/*DSG{{*/
mainForm = win.form(text="父窗体";right=372;bottom=292)
mainForm.add(
button={cls="button";text="发送并打开子窗体";left=134;top=209;right=255;bottom=254;z=2};
edit={cls="edit";left=19;top=58;right=360;bottom=186;edge=1;multiline=1;z=1}
)
/*}}*/
mainForm.button.oncommand = function(id,event){
var data = mainForm.edit.text;// 获取父窗体文本框的数据
var frmChild = mainForm.loadForm("\子窗体.aardio");// 加载子窗体
publish("接收窗口消息", data);// 发布消息
winform.show();// 显示子窗体
mainForm.close();// 关闭父窗体
}
mainForm.show();
return win.loopMessage();
第二段代码是子窗体的:
import win.ui;
/*DSG{{*/
var winform = win.form(text="接受数据";right=326;bottom=274;parent=...)
winform.add(
edit={cls="edit";left=12;top=13;right=315;bottom=185;edge=1;multiline=1;z=1}
)
/*}}*/
subscribe("接收窗口消息",function(data){
winform.edit.text = data;
})
winform.show();
win.loopMessage();
自己圆满解决了。其实关闭父窗体是没有用的,因为关闭了父窗体,子窗体也就随着一起关闭了,只需要把父窗体隐藏就行了。 目前我用过的有两种办法, 第一种去掉mainform的前面的var,使得整个mainForm里面的变量都是全局,这样子窗口可以直接访问变量名获取数据,但是这样不建议,后面变量管理不当容易出问题;第二种, var frmChild = mainForm.loadForm("\子窗体.aardio");这一句是可以带参数的,比如var frmChild = mainForm.loadForm("\子窗体.aardio",参数1,参数2); ,然后在子窗口里面写一个 t = {...},那么参数在加载子窗口的时候就传递到 子窗口里面去了。 小光芒 发表于 2024-5-4 17:58
目前我用过的有两种办法, 第一种去掉mainform的前面的var,使得整个mainForm里面的变量都是全局,这样子 ...
第一种方法不倾向,第二种方法,没用过,有实例否,麻烦提示一下,谢谢! //父窗口
var ret = winform.loadForm("\winform2--子窗口.aardio",winform.edit.text);
//子窗口
//loadForm = function(path,...)
var t = {...}; //t
页:
[1]