批量生成动态按钮实例

tanzh 2023-8-2 1322

import win.ui;
import console;
/*DSG{{*/
var winform = win.form(text="批量生成按钮实例";right=759;bottom=469;bgcolor=15780518)
winform.add(
custom={cls="custom";text="自定义控件";left=10;top=10;right=749;bottom=455;bgcolor=15780518;z=1}
)
/*}}*/

//aardio批量生成动态按钮实例

//做3个按钮,第1个,右1,下1
//得到第一个按钮位置,左右上下间距
left,right,top,bottom = 38,158,36,88
toRight = 138
toBottom = 72
rows,cols = 5,5; //行,列

buttonTab = {}; //批量生成位置
for(i=1;rows;1){ //行
	for(j=1;cols;1){ //列
		table.push(buttonTab,{
			left+(j-1)*toRight,right+(j-1)*toRight,
			top+(i-1)*toBottom,bottom+(i-1)*toBottom
		})
	}
}
//console.dump(buttonTab)

for(i=1;rows*cols;1){ //动态生成控件
	left,right,top,bottom = table.unpack(buttonTab[i]);
    //winform.add(
    winform.custom.addCtrl(
		['button'+i]={cls="button";text="按钮"++i;
			left=left;top=top;right=right;
			bottom=bottom;z=1};
	)

    winform.custom['button'+i].oncommand = function(id,event){
		winform.msgbox(owner.text)
	}
}

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


这个原生模型,简单易用,是受到99乘法表的启发,形成的模型思想,可修改cls为plus,美化样式

最新回复 (4)
  • 光庆 2023-8-2
    0 2
    不错,学习学习
  • lcj21 2023-8-3
    0 3
    这个不错,很实用,感谢分享!
  • 阿甘 2023-8-27
    0 4

    感谢分享!

    不指定每行的个数,水平居中自动换行写法:

    var btnMargin = 10;//button之间的间距
    var btnWidth = 100;//button宽度
    var btnHeight = 50;//button高度
    var btnOneLineCount = math.floor(winform.custom.width / (btnWidth + btnMargin));//一行最多显示多少个button
    
    var btnRectLeft = math.floor((winform.custom.width - (btnWidth * btnOneLineCount) - (btnMargin * (btnOneLineCount-1))) / 2);
    var btnRectTop = btnMargin;
    var btnRectRight = btnRectLeft + btnWidth;
    var btnRectBottom = btnRectTop + btnHeight;
    
    var buttonCount = 100;//button总个数
    var btnRectLeftStart = btnRectLeft;//button左边起始点
    
    for(i=1;buttonCount;1){ //动态生成控件
        winform.custom.addCtrl(
            ['button'+i]={cls="button";text="按钮"++i;
                left=btnRectLeft;top=btnRectTop;right=btnRectRight;bottom=btnRectBottom;z=1};
        )
        
        btnRectLeft = btnRectLeft + btnWidth + btnMargin;
        btnRectRight = btnRectLeft + btnWidth;
        if(i % btnOneLineCount == 0){
        	btnRectLeft = btnRectLeftStart;//超出一行最大显示个数,left回到起始点
        	btnRectTop += btnHeight + btnMargin;
        	btnRectRight = btnRectLeft + btnWidth;
        	btnRectBottom = btnRectTop + btnHeight;
        }
     
        winform.custom['button'+i].oncommand = function(id,event){
            winform.msgbox(owner.text)
        }
    }


  • tanzh 2023-9-2
    0 5

    谢谢指点,值得好好研究学习 

     批量自动生成按钮写库练习 

    https://aar.chengxu.online/thread-123.htm

返回