搜索
aardio官方社区 门户 查看主题

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

发布者: popdes | 发布时间: 2018-2-11 00:11| 查看数: 203| 评论数: 4|帖子模式

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

使用功能:
两者窗口之间通信利用了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();
  27. return winform;
复制代码

最新评论

松江 发表于 2018-2-11 21:05:09
loadForm方法就直接支持参数传递的啊,模态窗口也支持返回值
popdes 发表于 2018-2-11 21:27:25
松江 发表于 2018-2-11 21:05
loadForm方法就直接支持参数传递的啊,模态窗口也支持返回值

loadform后面待参数我知道, 这个参数子窗口怎么获取? 这个没看到.
模态窗口支持返回值,我上面代码里有写,第2个方法就是
松江 发表于 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();
复制代码
popdes 发表于 2018-2-11 23:24:48
松江 发表于 2018-2-11 22:53
使用特殊变量 ... 获取全部参数,其中第一个是父窗体,其它的是传入的参数

谢谢, 又学到了,

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

GMT+8, 2018-2-19 17:48 , Processed in 0.046875 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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