找回密码
 立即注册

微信登录

只需一步,快速开始

QQ登录

只需一步,快速开始

搜索
查看: 427|回复: 4

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

[复制链接]
  • TA的每日心情
    慵懒
    2024-9-9 17:19
  • 签到天数: 111 天

    连续签到: 1 天

    [LV.6]常住居民II

    35

    主题

    142

    回帖

    1194

    积分

    金牌会员

    积分
    1194
    来自: 中国
    发表于 2024-4-30 11:44:15 | 显示全部楼层 |阅读模式 来自: 中国
    非业余 - aardio 编程语言 - 非官方问答社区
    限时85折!暑假期间,用aardio培训班充实自己!https://mp.weixin.qq.com/s/c4Z8sZPOiMh_OTG2VPOJmA
    Aardio培训大揭秘,轻松上手打造个人项目!https://mp.weixin.qq.com/s/cr47qhp_Cpz0p57lbbPwug
    aardio风行者第二期培训班https://mp.weixin.qq.com/s/uB6XHUDnGSk0JlWuiBE9AA
    我用aardio写的两个窗体,第一段代码是父窗体的,目的是点击按钮后,把父窗体文本框的数据发送到子窗体的文本框,同时打开子窗体、关闭父窗体。目前可以实现以上功能,但是有报错:请帮我看看,请如果实在解决不了,就把错误弹出窗给禁止掉也行。谢谢!
    报错信息如下:---------------------------
    RAW CALLBACK ERROR
    ---------------------------
    错误行号:#14
    文件:[string "import win.ui;..."]:
    不支持此操作: _get table
    定义类型:self(namespace)
    名字:'winform'
    类型:null
    ---------------------------------------------------
    调用栈:
            [string "import win.ui;..."]: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>
            [kernel]: 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): ?

    我的具体代码如下:
    第一段代码是父窗体的:
    [AAuto] 纯文本查看 复制代码
    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();




    第二段代码是子窗体的:
    [AAuto] 纯文本查看 复制代码
    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();



    非业余 - aardio 编程语言 - 非官方问答社区
    限时85折!暑假期间,用aardio培训班充实自己!https://mp.weixin.qq.com/s/c4Z8sZPOiMh_OTG2VPOJmA
    Aardio培训大揭秘,轻松上手打造个人项目!https://mp.weixin.qq.com/s/cr47qhp_Cpz0p57lbbPwug
    aardio风行者第二期培训班https://mp.weixin.qq.com/s/uB6XHUDnGSk0JlWuiBE9AA
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-9-9 17:19
  • 签到天数: 111 天

    连续签到: 1 天

    [LV.6]常住居民II

    35

    主题

    142

    回帖

    1194

    积分

    金牌会员

    积分
    1194
    来自: 加拿大
     楼主| 发表于 2024-5-3 22:24:20 | 显示全部楼层 来自: 加拿大
    自己圆满解决了。其实关闭父窗体是没有用的,因为关闭了父窗体,子窗体也就随着一起关闭了,只需要把父窗体隐藏就行了。
    回复

    使用道具 举报

  • TA的每日心情

    2024-7-27 12:21
  • 签到天数: 28 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    6

    主题

    24

    回帖

    326

    积分

    培训会员

    积分
    326
    来自: 中国江西赣州
    发表于 2024-5-4 17:58:18 | 显示全部楼层 来自: 中国江西赣州
    目前我用过的有两种办法, 第一种  去掉mainform的前面的var,使得整个mainForm里面的变量都是全局,这样子窗口可以直接访问变量名获取数据,但是这样不建议,后面变量管理不当容易出问题;  第二种, var frmChild = mainForm.loadForm("\子窗体.aardio");  这一句是可以带参数的,比如  var frmChild = mainForm.loadForm("\子窗体.aardio",参数1,参数2); ,然后在子窗口里面写一个 t = {...},那么参数在加载子窗口的时候就传递到 子窗口里面去了。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-9-9 17:19
  • 签到天数: 111 天

    连续签到: 1 天

    [LV.6]常住居民II

    35

    主题

    142

    回帖

    1194

    积分

    金牌会员

    积分
    1194
    来自: 中国
     楼主| 发表于 2024-5-7 11:07:10 | 显示全部楼层 来自: 中国
    小光芒 发表于 2024-5-4 17:58
    目前我用过的有两种办法, 第一种  去掉mainform的前面的var,使得整个mainForm里面的变量都是全局,这样子 ...

    第一种方法不倾向,第二种方法,没用过,有实例否,麻烦提示一下,谢谢!
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-3-20 10:26
  • 签到天数: 18 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    21

    主题

    39

    回帖

    450

    积分

    培训会员

    积分
    450
    来自: 中国重庆
    发表于 2024-5-10 16:06:51 | 显示全部楼层 来自: 中国重庆
    //父窗口
    var ret = winform.loadForm("\winform2--子窗口.aardio",winform.edit.text);

    //子窗口
    //loadForm = function(path,...)
    var t = {...}; //t[2]
    回复

    使用道具 举报

    *滑块验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|非业余 - aardio 编程语言 - 非官方问答社区

    GMT+8, 2024-9-17 03:07 , Processed in 0.120501 second(s), 31 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表