rmajly 发表于 2024-4-30 11:44:15

点击按钮把数据发送到子窗体,接着关闭父窗体的疑问

我用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();


rmajly 发表于 2024-5-3 22:24:20

自己圆满解决了。其实关闭父窗体是没有用的,因为关闭了父窗体,子窗体也就随着一起关闭了,只需要把父窗体隐藏就行了。

小光芒 发表于 2024-5-4 17:58:18

目前我用过的有两种办法, 第一种去掉mainform的前面的var,使得整个mainForm里面的变量都是全局,这样子窗口可以直接访问变量名获取数据,但是这样不建议,后面变量管理不当容易出问题;第二种, var frmChild = mainForm.loadForm("\子窗体.aardio");这一句是可以带参数的,比如var frmChild = mainForm.loadForm("\子窗体.aardio",参数1,参数2); ,然后在子窗口里面写一个 t = {...},那么参数在加载子窗口的时候就传递到 子窗口里面去了。

rmajly 发表于 2024-5-7 11:07:10

小光芒 发表于 2024-5-4 17:58
目前我用过的有两种办法, 第一种去掉mainform的前面的var,使得整个mainForm里面的变量都是全局,这样子 ...
第一种方法不倾向,第二种方法,没用过,有实例否,麻烦提示一下,谢谢!

善小而为_ 发表于 2024-5-10 16:06:51

//父窗口
var ret = winform.loadForm("\winform2--子窗口.aardio",winform.edit.text);

//子窗口
//loadForm = function(path,...)
var t = {...}; //t
页: [1]
查看完整版本: 点击按钮把数据发送到子窗体,接着关闭父窗体的疑问