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

关于tab选项卡父子窗口中函数相互访问的方法

发布者: dasan | 发布时间: 2012-1-3 21:36| 查看数: 6306| 评论数: 7|帖子模式

关于tab选项卡中父子窗口中函数的互访,选项卡中互访的函数互访的实现发放例子。
本来自己摸索了2天得到了一个曲解的方法,下午在老大的解释和点拨下完成的例子,希望有一点的借鉴作用,请大家有什么好的方法也回帖我学习一下。
特别是下面这句话很关键:
父窗口的函数至少应当是这样写 winform.loadlistview1  = ............
winform默认是一个var声明的局部变量,根本不可能作为名字空间使用。
这个是主程序:
  //main
namespace cstabfunc;
import win;
import win.ui;
/*DSG{{*/
var winform = win.form(parent=...; text="aardio Form";right=349;bottom=249 )
winform.add(
tab={ bottom=160;text=
"tab";left=34;top=35;z=1;right=304;edge=1;cls="tab" };
button2={ bottom=228;text=
"调用tab2中函数";left=185;top=183;z=3;right=318;cls="button" };
button={ bottom=228;text=
"调用tab1中函数";left=20;top=183;z=2;right=153;cls="button" }
)
/*}}*/

page1 = winform.tab.
loadcode("\res\child1.aau")
page2 = winform.tab.
loadcode("\res\child2.aau")

winform.button2.oncommand =
function(id,event){
    winform.tab.items[2].child2func(2);
}

winform.button.oncommand =
function(id,event){
    page1.child1func(1);
}

winform.csfunc =
function(){
    win.msgbox(
"我是父窗口中的winform.csfunc()函数","aardio");
}

csfunc =
function(){ //tab中使用名字空间cstabfunc访问
    win.msgbox("我是父窗口中的csfunc()函数","aardio");
}

winform.show();
win.loopMessage();
return winform;

//感谢版主的指点
//winform默认是一个var声明的局部变量,根本不可能作为名字空间使用。

下面是tab中的子窗口child1
//child1
import win.ui;
/*DSG{{*/
var winform = win.form(parent=...; text="child1";right=329;bottom=159 )
winform.add(
button={ bottom=99;text=
"调用父窗口函数";left=96;top=44;z=1;right=208;cls="button" }
)
/*}}*/

winform.button.oncommand =
function(id,event){
   
//调用父窗体的函数
    winform.parent.parent.csfunc();
}

winform.child1func =
function(id){
    win.msgbox(
"我是子窗口child1中的函数","aardio");
}

winform.show()
win.loopMessage();
return winform;

下面是tab中子窗口child2:
//child2
import win.ui;
/*DSG{{*/
var winform = win.form(parent=...; right=306;text="child2";bottom=133 )
winform.add(
button={ bottom=78;text=
"调用child1中函数";left=19;top=35;z=1;right=131;cls="button" };
button2={ bottom=78;right=269;left=157;top=35;z=2;text=
"调用父窗口函数";cls="button" }
)
/*}}*/

winform.button2.oncommand =
function(id,event){
   
//调用父窗口函数  方法二
    cstabfunc.csfunc();
   
}
winform.button.oncommand =
function(id,event){
   
//调用child2中的函数
    winform.parent.parent.tab.items[1].child1func(1);
}

winform.child2func =
function(id){
    win.msgbox(
"我是child2中的函数","aardio");
}

winform.show()
win.loopMessage();
return winform;



评分

参与人数 2银币 +90 收起 理由
aaucn + 60 很给力!
im286 + 30 很给力!

查看全部评分

最新评论

quicker 发表于 2012-1-3 21:54:47

问题解决了,不忘与大家分享经验,这种精神难能可贵,值得学习!

问题解决了,不忘与大家分享经验,这种精神难能可贵,值得学习!
kwwl200601 发表于 2012-4-24 10:50:26

非常好的教程!堪称父子窗口函数互访的经典教程,已复制存档。 原文: //调用child2中的函数 应为://调用child1中的函数 指出是为了避免像我这

非常好的教程!堪称父子窗口函数互访的经典教程,已复制存档。
原文: //调用child2中的函数
应为://调用child1中的函数
指出是为了避免像我这样的新手搞不清楚(想不明白)。
不争 发表于 2012-4-24 11:16:01

只要是全局变量,跨文件都可以直接访问。

只要是全局变量,跨文件都可以直接访问。

点评

同意: 5.0 真棒: 5.0
比如说这句: winform.button.oncommand = function(id,event){ //调用父窗体的函数 winform.parent.parent.csfunc(); }  发表于 2012-7-3 10:01
同意: 5 真棒: 5
问一下,为什么是winform.parent.parent,这里的两个parent与一个parent有什么区别?我直接用一个也可以正常运行的  发表于 2012-7-3 10:00
mogyz 发表于 2012-5-13 12:18:46

真的是很好的教程。其中child2中的代码: [color=#000000]winform.button.oncommand = [/color][color

真的是很好的教程。其中child2中的代码:
winform.button.oncommand = function(id,event){
   
//调用child2中的函数
    winform.parent.parent.tab.items[1].child1func(1);
}
最后一句尝试写成下面的形式也是可以的:
winform.parent.items[1].child1func(1);
不过其意义的确没有原文的那么清晰。


pabc53 发表于 2013-12-28 10:20:28

学习了,很好的例程。

学习了,很好的例程。
dragon5 发表于 2017-7-4 19:46:21
正在找这个解决方法,谢谢了

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

GMT+8, 2017-9-22 07:02 , Processed in 0.187500 second(s), 24 queries , Wincache On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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