单选框控件radiobutton的特点是同一组中只能选择一个,是互相排斥的。如果不分组,则窗口界面中所有的单选框控件都是同一组,只能选择一个。分组之后,每组的单选框都可以选择一个。那么怎么分组呢?通常是用分组框groupbox来进行分组。分组的关键在于z的顺序,比如下面的代码中,分组框groupbox的Z为1,它分组内的单选框Z序是2、3、4、5;分组框groupbox2的Z为6,它分组内的单选框Z序是7、8、9、10。这样分成了两组,各组之单的单选框就不会再互相排斥了。
import win.ui;
/*DSG{{*/
var winform = win.form(text="简码编程www.jianma123.com";right=555;bottom=252)
winform.add(
groupbox={cls="groupbox";text="groupbox";left=36;top=31;right=519;bottom=91;edge=1;z=1};//第一组
radiobutton={cls="radiobutton";text="radiobutton";left=58;top=58;right=156;bottom=81;z=2};
radiobutton2={cls="radiobutton";text="radiobutton2";left=165;top=58;right=263;bottom=81;z=3};
radiobutton3={cls="radiobutton";text="radiobutton3";left=280;top=58;right=378;bottom=81;z=4};
radiobutton4={cls="radiobutton";text="radiobutton4";left=385;top=58;right=483;bottom=81;z=5};
groupbox2={cls="groupbox";text="groupbox2";left=36;top=107;right=517;bottom=174;edge=1;z=6};//第二组
radiobutton5={cls="radiobutton";text="radiobutton5";left=59;top=135;right=157;bottom=158;z=7};
radiobutton6={cls="radiobutton";text="radiobutton6";left=166;top=135;right=264;bottom=158;z=8};
radiobutton7={cls="radiobutton";text="radiobutton7";left=281;top=135;right=379;bottom=158;z=9};
radiobutton8={cls="radiobutton";text="radiobutton8";left=386;top=135;right=484;bottom=158;z=10}
button={cls="button";text="获取单选框2的选中状态";left=38;top=191;right=215;bottom=222;z=11};
button2={cls="button";text="设置单选框3的选中状态";left=221;top=191;right=412;bottom=222;z=12};
)
/*}}*/
winform.button.oncommand = function(id,event){
winform.msgbox("单选框2的选中状态是:"++tostring(winform.radiobutton2.checked),"简码编程提示:")
}
winform.button2.oncommand = function(id,event){
winform.radiobutton3.checked = 1;//若赋值为0则为取消选中状态
//::PostMessage(winform.radiobutton3.hwnd, 0xf5/*_BM_CLICK*/, 0, 0) //用发消息的方式才不会出现同组多选问题
}
winform.show()
win.loopMessage();
假如把分组框groupbox2的Z序改为16,则所有的单选框都归组到第一组了,就会整个界面只能选中一个单选框。
注意事项:同组的单选框,用鼠标点选不会出现多选。但是用代码设置单选框的选中状态,同组的不会互斥,也就是会产生多选的情况,比如上面的代码,选鼠标选中单选框2,再单击按钮执行代码选中单选框3,则单选框2和单选框3都是选中状态。因此,我们可以用直接发消息的方式来选择单选框,避免同组多选的问题:
winform.button2.oncommand = function(id,event){
::PostMessage(winform.radiobutton3.hwnd, 0xf5/*_BM_CLICK*/, 0, 0)//用发消息的方式才不会出现同组多选问题
}