窗体之间的通信,与模态窗体的通信的两种方式

窗体之间的通信,与模态窗体的通信的两种方式

By admin at 2018-02-11 • 0人收藏 • 1623人看过

GIF.gif

父窗口代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

import win.ui;

/*DSG{{*/

mainForm = win.form(text="与模态窗口相互通信演示";right=372;bottom=292)

mainForm.add(

button={cls="button";text="打开模态子窗口并附带参数";left=197;top=19;right=360;bottom=88;z=3};

edit={cls="edit";text="你好啊,模态子窗口?";left=20;top=18;right=187;bottom=85;edge=1;multiline=1;z=1};

edit2={cls="edit";left=18;top=107;right=359;bottom=186;edge=1;multiline=1;z=2};

edit3={cls="edit";left=16;top=214;right=359;bottom=279;edge=1;multiline=1;z=4}

)

/*}}*/

mainForm.button.oncommand = function(id,event){

     

     

var frmChild,wb = mainForm.loadForm("\筛选器\testaa.aardio");

publish("窗体之间传参",mainForm.edit.text)

var chstr = frmChild.doModal();

    mainForm.edit3.text =chstr

     

     

}

subscribe("接收一个窗口销毁",function(...){

    mainForm.edit2.text = ...

} )

mainForm.enableDpiScaling();

mainForm.show();

return win.loopMessage();

模态窗口代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

import win.ui;

/*DSG{{*/

var winform = win.form(text="模态子窗口";right=326;bottom=274;parent=...)

winform.add(

button={cls="button";text="关闭模态窗口并附带返回值";left=12;top=197;right=312;bottom=258;z=2};

edit={cls="edit";left=12;top=13;right=315;bottom=185;edge=1;multiline=1;z=1}

)

/*}}*/

winform.beforShowWindow = function(shown,status){ 

    subscribe("窗体之间传参",function(str){

         

        winform.edit.text = str;

         

    } )

}

winform.beforeDestroy = function(){

     

    publish("接收一个窗口销毁",'我是模态窗口销毁时候的返回消息:\r\n' ++ winform.edit.text)

     

}

winform.button.oncommand = function(id,event){

    winform.endModal('我是点击了关闭模态窗口的返回消息:\r\n' ++ "你好啊主窗口,我是模态窗口关闭附带的返回值.")

}

winform.enableDpiScaling();

winform.show();

win.loopMessage();

return winform;

aardio

1 个回复 | 最后更新于 2018-02-27

admin

admin

2018-02-27   #1

以上这种方式有它的好处和弊端:

好处: 一对多, 凡是运行了的程序中有这个接收

subscribe()

的都会同一时间接收到消息.

弊端: 因为一对多,有时候处理不好,就会影响到其他调用的程序.....

于是,为了能避免这个问题,我们需要用函数调用形式来实现:

假设:有工程中有两个界面a和b , 界面b中可以定义一个窗体函数

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

//获取其他界面传递的参数

winform.调用子程序 = function(tab){

    //第五项需要字符串转换为table表

    eval_retTable5 = eval(tab[5]);

    //复制获得的表给此界面初始化表

    retTable = table.clone(tab);

    var str = eval_retTable5["调用子程序"];

    for(i=1;winform.子流程列表.count;1){

        if(winform.子流程列表.getItemText(i,1) == str){

            winform.子流程列表.selIndex = i;

            winform.子流程列表.setFocus()

            winform.子流程列表.ensureVisible();

            break ;

        }

    }

}

那么这个时候,界面a中要是想调用这个窗体函数,只需要:

1

2

3

4

5

6

7

8

//调用模态形式弹出子界面

                var frmChild,wb = winform.loadForm("\界面窗口\子窗口\子流程浏览.aardio");

                frmChild.调用子程序(本行数据表);

                //console.dump(本行数据表)

                var ret = frmChild.doModal();

                if(ret){

                    winform.流程编辑框.setItemText(ret,nmListView.iItem);   

                }

即: 加载b窗体为子窗体, 然后利用模态窗体等待返回之前,调用那个窗体函数即可.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值