aardio复选列表框控件checklist是复选框checkbox和列表框listbox的组合。点击列表项文本,它会高亮显示,点击复选框,它才是勾选状态。需要注意的是,勾选和高亮选择是两个不同的概念,两者可以在不同的项同时存在,比如,先点第1项的文本让它高亮,再点第5项的复选框勾选,那么高亮选择项仍然是第1项,虽然第5项已经被勾选,但第5项并不是高亮选择项,因为复选列表框控件checklist是复选框checkbox和列表框listbox两者组合,所以才会有这种情况,这是要特别注意的地方。源码演示如下:

import win.ui;
/*DSG{{*/
var winform = win.form(text="简码编程 jianma123.com";right=323;bottom=268;max=false;min=false)
winform.add(
checklist={cls="checklist";left=25;top=25;right=304;bottom=132;edge=1;items={};z=1};
edit={cls="edit";left=25;top=140;right=304;bottom=235;edge=1;multiline=1;z=2}
)
/*}}*/
import console;
//直接table方式预置项
winform.checklist.items = { "第1项";"第2项";"第3项" }
//添加项
winform.checklist.addItem("第4项")
winform.checklist.addItem("第5项")
//响应通知
winform.checklist.onnotify = function(id,code,ptr){
//console.log(id,code,ptr)
var thechecklist = winform.checklist.getNotifyMessage(code,ptr);
if( !thechecklist ){return;}
var 当前项 = thechecklist.iItem;//这样获取的才是响应通知的项,而不是列表高亮选择项
var 是否已勾选 = winform.checklist.getChecked(当前项);
//选定项改变事件
select(code) {
case 0xFFFFFF9B/*_LVN_ITEMCHANGED*/ {
winform.edit.text = "";
winform.edit.print("鼠标单击第 "+当前项+" 项,是否已勾选:"++tostring(是否已勾选))
winform.edit.print("高亮选择的是第"+winform.checklist.selIndex+"项")
}
}
}
winform.show()
win.loopMessage();