多窗口变量传递

多窗口变量传递

多窗口交互的方法

将窗体对象赋值到全局变量,就可以在其他代码文件中直接使用了。例如主窗体我们一般这样写:
mainForm = win.form(text="使用选项卡控件";right=599;bottom=399)
注意一个程序中只有主窗体命名为 mainForm 。

但大多时候,我们应当把其他窗体对象赋值以局部变量,例如:
var frmTabPage1 = win.form(text="选项卡的子窗口";right=599;bottom=399)
上面的 var 语句声明一个局部变量 - 局部变量限制了他的作用域在定义他的语句块中生效,不能在其他文件中访问该局部变量。

实际上全局变量要少用,全局的窗体对象更应该少用,每个窗体应当保持独立性。打个比方,一个程序小象一个小世界,各个子窗口就象各个小国家,国家之间要保持一定的独立性,国家与国家之间有什么事儿要沟通 - 你不能直接随意的冲过国界跑来跑去的玩儿(大家都这样搞,就象各个窗体的控件都这样搞,程序就会变的很混乱),你得经过外交部门。这个外交部门,在我们写程序的时候来讲,我们可以用以下几种方式来实现:

方式1、直接在 main.aardio 中创建全局变量,例如 main.aardio代码如下:

import win.ui;
/*DSG{{*/
mainForm = win.form(text="使用选项卡控件";right=599;bottom=399)
mainForm.add(tab={cls="tab";left=23;top=20;right=568;bottom=373;edge=1;z=1})
/*}}*/

frmTabPage1 = mainForm.tab.loadForm("\res\frmTabPage1.aardio");
frmTabPage2 = mainForm.tab.loadForm("\res\frmTabPage2.aardio");

myUserInfo = { 
    username = "" ;//frmTabPage1.editUsername.text 的值
    passeword = "" ;//frmTabPage1.editPassword.text 的值
    webSite = "" ;//frmTabPage2.editWebsit.text 的值
}

mainForm.show()  
当然全局变量是所有加载的窗体可以直接访问的,例如在/res/frmTabPage1.aau中可以这样写:
frmTabPage1.editUsername.oncommand = function(id,event){
    if( event = 0x300/*_EN_CHANGE*/ ){
        myUserInfo.username = frmTabPage1.editUsername.text;
    }
}

方式2、公用类库的方式,例如我们新建一个用户库 叫 myUserInfo,里面的代码如下:

namespace myUserInfo{
    username = "" ;//frmTabPage1.editUsername.text 的值
    passeword = "" ;//frmTabPage1.editPassword.text 的值
    webSite = "" ;//frmTabPage2.editWebsit.text 的值
}
那么在 /res/frmTabPage1.aardio 这个文件里就可以这么写,在修改文本框的时候及时更新公用的数据:
import myUserInfo;
frmTabPage1.editUsername.oncommand = function(id,event){
    if( event = 0x300/*_EN_CHANGE*/ ){
        myUserInfo.username = frmTabPage1.editUsername.text;
    }
}

其他窗体要使用这个数据同样很简单,只要import myUserInfo; 就行了;

方式3、在控件值变更的时候调用 publish() 函数发布消息就行了,例如:

frmTabPage1.editUsername.oncommand = function(id,event){
    if( event = 0x300/*_EN_CHANGE*/ ){
       publish("界面上的用户名被改了",frmTabPage1.editUsername.text)
    }
}

在其他窗体中就可以根据需要订阅此消息,例如:

subscribe("界面上的用户名被改了",function(值){
    frmTabPage2.editUsername.text = 值
} )
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值