搜索
查看: 5534|回复: 1

[win] 使用tab选项卡控件

   关闭 [复制链接]

30

主题

699

帖子

4198

积分

超级版主

Rank: 8Rank: 8

积分
4198
发表于 2015-12-9 22:25:20 | 显示全部楼层 |阅读模式
第一步:在aardio中新建对话框工程,打开main.aardio
控件工具箱里点选tab控件,然后在主窗体( mainForm )上拖放一个tab控件。
1.png


第二步:在工程中添加tab选项卡控件的子窗口文件。
右键点击“aardio工程/资源文件目录",新建一个“窗体设计器”,并命名为 frmTabPage1.aardio,
可按相同的方式依次创建多个子页面,例如  frmTabPage2.aau, frmTabPage3.aau,frmTabPage4.aardio ...... 等等
2.png


第三步:回到main.aardio,点击【代码视图】 3.jpg
将子页面窗口 frmTabPage1.aardio,frmTabPage2.aau, .... 等依次从工程文件管理器中拖动到 main.aardio 中,aardio 会自动生成以下代码:
4.png
将上面代码中的 mainForm.loadForm 修改为 mainForm.tab.loadForm,最终代码如下:
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");

mainForm.show()  

需要注意以下几个要点:


1、修改tab选项卡的子窗口文件( frmTabPage1.aardio,frmTabPage2.aau, ....  ) 以后要点击保存按钮,然后再运行主窗体(main.aardio) 才会加载修改后的子窗口文件。
6.png

2、tab选项卡的子窗口 frmTabPage1.aardio,frmTabPage2.aau, ....  并不需要去计算坐标与tab选项卡的大小一致。
aardio的窗体设计器设置的是控件的相对坐标 - 并不需要与运行时的大小完全一致。无论窗体在运行时怎么改变大小,都可以方便的在控件的【固定边距】属性中设置控件保持相对窗口左边、上边、右边、或下边的边距位置保持不变,或者自适应大小。

5.png



评分

参与人数 2银币 +8 收起 理由
64u6vmnuu2 + 3 赞一个!
sunk926 + 5 赞一个!

查看全部评分

回复

使用道具 举报

30

主题

699

帖子

4198

积分

超级版主

Rank: 8Rank: 8

积分
4198
 楼主| 发表于 2015-12-11 00:51:07 | 显示全部楼层

多窗口交互的方法

将窗体对象赋值到全局变量,就可以在其他代码文件中直接使用了。例如主窗体我们一般这样写:
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 = 值
} )




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2018-1-18 04:25 , Processed in 0.046875 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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