aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 25143|回复: 4

父窗口与其模态窗口相互通信演示

[复制链接]

38

主题

129

回帖

1045

积分

荣誉会员

积分
1045
发表于 2018-2-11 00:11:58 | 显示全部楼层 |阅读模式
父窗口与其模态窗口相互通信演示

使用功能:
两者窗口之间通信利用了subscribe和publish订阅指令
子模态窗口里使用了新增的窗口函数winform.beforShowWindow() 和 winform.beforeDestroy ()

实现原理:
父窗口通过打开模态窗口之前发送订阅信息, 模态窗口显示之前获取到此订阅信息,然后展示信息并显示窗体 , 模态窗口中返回信息用了两种方式,1是利用窗口销毁前函数发送订阅信息, 2是通过模态终结指令endModal()返回信息.

适用范围:
窗体之间的传递信息

演示图像:


父窗体代码如下:
  1. import win.ui;
  2. /*DSG{{*/
  3. mainForm = win.form(text="与模态窗口相互通信演示";right=372;bottom=292)
  4. mainForm.add(
  5. button={cls="button";text="打开模态子窗口并附带参数";left=197;top=19;right=360;bottom=88;z=3};
  6. edit={cls="edit";text="你好啊,模态子窗口?";left=20;top=18;right=187;bottom=85;edge=1;multiline=1;z=1};
  7. edit2={cls="edit";left=18;top=107;right=359;bottom=186;edge=1;multiline=1;z=2};
  8. edit3={cls="edit";left=16;top=214;right=359;bottom=279;edge=1;multiline=1;z=4}
  9. )
  10. /*}}*/

  11. mainForm.button.oncommand = function(id,event){
  12.      
  13.      
  14. var frmChild,wb = mainForm.loadForm("\筛选器\testaa.aardio");
  15. publish("窗体之间传参",mainForm.edit.text)
  16. var chstr = frmChild.doModal();
  17.     mainForm.edit3.text =chstr
  18.      
  19.      
  20. }
  21. subscribe("接收一个窗口销毁",function(...){
  22.     mainForm.edit2.text = ...
  23. } )


  24. mainForm.enableDpiScaling();
  25. mainForm.show();

  26. return win.loopMessage();
复制代码


模态窗口代码如下:
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="模态子窗口";right=326;bottom=274;parent=...)
  4. winform.add(
  5. button={cls="button";text="关闭模态窗口并附带返回值";left=12;top=197;right=312;bottom=258;z=2};
  6. edit={cls="edit";left=12;top=13;right=315;bottom=185;edge=1;multiline=1;z=1}
  7. )
  8. /*}}*/

  9. winform.beforShowWindow = function(shown,status){
  10.     subscribe("窗体之间传参",function(str){
  11.          
  12.         winform.edit.text = str;
  13.          
  14.     } )
  15. }

  16. winform.beforeDestroy = function(){
  17.      
  18.     publish("接收一个窗口销毁",'我是模态窗口销毁时候的返回消息:\r\n' ++ winform.edit.text)
  19.      
  20. }

  21. winform.button.oncommand = function(id,event){
  22.     winform.endModal('我是点击了关闭模态窗口的返回消息:\r\n' ++ "你好啊主窗口,我是模态窗口关闭附带的返回值.")
  23. }

  24. winform.enableDpiScaling();
  25. winform.show();

  26. win.loopMessage();
复制代码

1

主题

47

回帖

1434

积分

新手入门

积分
1434
发表于 2018-2-11 21:05:09 | 显示全部楼层
loadForm方法就直接支持参数传递的啊,模态窗口也支持返回值

38

主题

129

回帖

1045

积分

荣誉会员

积分
1045
 楼主| 发表于 2018-2-11 21:27:25 | 显示全部楼层
松江 发表于 2018-2-11 21:05
loadForm方法就直接支持参数传递的啊,模态窗口也支持返回值

loadform后面待参数我知道, 这个参数子窗口怎么获取? 这个没看到.
模态窗口支持返回值,我上面代码里有写,第2个方法就是

1

主题

47

回帖

1434

积分

新手入门

积分
1434
发表于 2018-2-11 22:53:04 | 显示全部楼层
popdes 发表于 2018-2-11 21:27
loadform后面待参数我知道, 这个参数子窗口怎么获取? 这个没看到.
模态窗口支持返回值,我上面代码里有写 ...

使用特殊变量 ... 获取全部参数,其中第一个是父窗体,其它的是传入的参数
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="aardio form";right=497;bottom=416)
  4. winform.add()
  5. /*}}*/

  6. var code = `
  7. import win.ui;
  8. /*DSG{{*/
  9. var winform = win.form(text="aardio form";right=367;bottom=226)
  10. winform.add()
  11. /*}}*/

  12. var args = {...};//接收全部参数
  13. var parent = table.shift(args);
  14. import console;
  15. console.log("父窗体",parent);
  16. console.log("其它参数")
  17. console.varDump(args)

  18. winform.show();
  19. win.loopMessage();

  20. `

  21. winform.loadForm(code,"参数1","参数2","参数3")
  22. winform.show();
  23. win.loopMessage();
复制代码

38

主题

129

回帖

1045

积分

荣誉会员

积分
1045
 楼主| 发表于 2018-2-11 23:24:48 | 显示全部楼层
松江 发表于 2018-2-11 22:53
使用特殊变量 ... 获取全部参数,其中第一个是父窗体,其它的是传入的参数

谢谢, 又学到了,
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-2-14 09:26 , Processed in 0.086497 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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