多个组件事件共用一个函数,函数内部通过owner识别组件主体对象。
对于大量性质相同的组件处理时非常有效。
效果:
代码:
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=296;bottom=286)
winform.add(
checkbox={cls="checkbox";text="Checkbox";left=95;top=80;right=175;bottom=122;z=1};
checkbox2={cls="checkbox";text="Checkbox";left=95;top=119;right=175;bottom=148;z=2};
checkbox3={cls="checkbox";text="Checkbox";left=95;top=157;right=175;bottom=185;z=3};
checkbox4={cls="checkbox";text="Checkbox";left=96;top=197;right=176;bottom=215;z=4};
checkbox5={cls="checkbox";text="Checkbox";left=97;top=234;right=177;bottom=256;z=5};
edit={cls="edit";text="Edit";left=16;top=22;right=284;bottom=57;edge=1;multiline=1;z=6}
)
/*}}*/
var chks = {}
checkcommand = function(id,event){
chks[""++id] = owner.checked:null
winform.edit.text=..string.join(..table.keys(chks),",")
}
winform.checkbox.oncommand = checkcommand
winform.checkbox2.oncommand = checkcommand
winform.checkbox3.oncommand = checkcommand
winform.checkbox4.oncommand = checkcommand
winform.checkbox5.oncommand = checkcommand
winform.show();
win.loopMessage();
看明白以上代码后,可以将其处理的更简洁一点:
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=296;bottom=286)
winform.add(
checkbox={cls="checkbox";text="Checkbox";left=95;top=80;right=175;bottom=122;z=1};
checkbox2={cls="checkbox";text="Checkbox";left=95;top=119;right=175;bottom=148;z=2};
checkbox3={cls="checkbox";text="Checkbox";left=95;top=157;right=175;bottom=185;z=3};
checkbox4={cls="checkbox";text="Checkbox";left=96;top=197;right=176;bottom=215;z=4};
checkbox5={cls="checkbox";text="Checkbox";left=97;top=234;right=177;bottom=256;z=5};
edit={cls="edit";text="Edit";left=16;top=22;right=284;bottom=57;edge=1;multiline=1;z=6}
)
/*}}*/
var chks = {}
for(hwnd,ctrl in winform.eachControlEx("checkbox") ){
ctrl.oncommand = function(id,event){
chks[""++id] = owner.checked:null
winform.edit.text=..string.join(..table.keys(chks),",")
}
}
winform.show();
win.loopMessage();