让winform创建多个button控件

By o3o_o3o_o3o at 2021-08-12 • 1人收藏 • 216人看过

如果有一天,一个aardio的程序上面需要在窗口上创建2021个button控件,你会怎么创建?


1.一个一个地搞出来。

但是这样是不可取的,因为这样的话代码太多、太麻烦;一行一行密密麻麻的代码会显得非常乱。

2.用循环语句。

我最初构想的的代码:

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469;maximize=1)
winform.add()
/*}}*/

//winform

import math;
var dx,dy,cx,cy = win.getPos(win.getDesktop());

for(i=1;2021;1){
	winform.add( 
		button = { 
			cls="button";bottom=30;right=100;left=0;top=0;z=1;text="Button"+i;id=123;autoResize=false;
		}; 
	)//创建button控件
	winform.button.setPos(math.random(1,cx),math.random(1,cy))//设置随机位置
}

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

可是,我将它运行了之后,虽然效果非常的炫酷,但是还没有达到预期的效果:

我思考了一下,可能是因为它们的控件名称都相同,所以只会留下最后一个被修改的。这么简单的问题不就是改一下控件名称的代码不就行了吗?

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469;maximize=1)
winform.add()
/*}}*/

//winform

import math;
var dx,dy,cx,cy = win.getPos(win.getDesktop());

for(i=1;2021;1){
	winform.add( 
		button+i = { 
			cls="button";bottom=30;right=100;left=0;top=0;z=1;text="Button"+i;id=123;autoResize=false;
		}; 
	)//创建button控件
	winform.button+i.setPos(math.random(1,cx),math.random(1,cy))//设置随机位置
}

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

But,它报错了。它把+i也算进空间名称里了,但是空间名称里不允许出现像+一样的符号的。这根本无法在控件名称的后面加上一个东西,因为winform.add()函数里面的控件名称不是任何类型的常量或者变量。我思索了很久,怎么用循环语句创建2021个button控件。

终于,我找到了突破口:

14.PNG

(上面的图片来自于网页:aardio之特殊符号用法大全 - 教程专版 - aardio官方社区 - Powered by Discuz!

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469;maximize=1)
winform.add()
/*}}*/

//winform

import math;
var dx,dy,cx,cy = win.getPos(win.getDesktop());

for(i=1;2021;1){
	winform.add( 
		["button"+i] = { 
			cls="button";bottom=30;right=100;left=0;top=0;z=1;text="Button"+i;id=123;autoResize=false;
		}; 
	)
	winform["button"+i].setPos(math.random(1,cx),math.random(1,cy))//设置随机位置
}

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

运行一下,试试看:

15.PNG

成功!

4 个回复 | 最后更新于 2021-08-13
2021-08-12   #1

https://bbs.aardio.com/forum.php?mod=viewthread&tid=11257

2021-08-12   #2

2021-08-12   #3

https://www.htmlayout.cn/t/175

以前写过

还有, 你这样弄着玩可以, 搞那么多控件, 怕不是要崩

2021-08-13   #4

如果有非常多的控件,其实也可以用一个 plus 控件画出来,响应事件的时候再计算一下坐标就可以了。参考标准库里的 color.view, color.viewForm ,应用例子就是工具里的调色器(打开色表)

登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前在学aardio+halcon机器视觉.
加入本站专享群:783804676
AARDIO语言QQ大群:70517368
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
C大Aardio论坛:Aar爱好者论坛
本 站 主 站:Stm32cube中文网
Sciter中文在线文档Sciter在线学习文档
赞助商:才仁机械
下载站:
非凡软件站



Loading...