需求:要实现CheckListBox控件如果包含指定的值,则该项被默认选中且不能取消。
查询了相关资料,发现CheckListBox控件好像并没有属性或事件直接支持这个功能,于是通过CheckListBox控件的Click事件、DoubleClick事件、SelectedValueChanged事件来实现此需求。
代码示例:
private void Form1_Load(object sender, EventArgs e)
{
//在此集合里的数据被强制选择,不能取消
lstNotCancel.Add("1");
lstNotCancel.Add("2");
lstNotCancel.Add("3");
for (int i = 0; i < 100; i++)
{
cklMain.Items.Add(i.ToString());
//CheckListBox如果包含lstNotCancel里的值,则默认选中
if (lstNotCancel.Contains(cklMain.Items[i]))
{
cklMain.SetItemChecked(i, true);
}
}
}
private void cklMain_Click(object sender, EventArgs e)
{
//sValue:CheckListBox当前被选中项的值
string sValue = cklMain.Items[cklMain.SelectedIndex].ToString();
//如果lstNotCancel集合里包含当前选择项的值,则修改当前项的选中状态为Checked
if (cklMain.SelectedIndex > -1 && lstNotCancel.Contains(sValue))
{
cklMain.SetItemCheckState(cklMain.SelectedIndex, CheckState.Checked);
}
}
注意:CheckListBox的三个事件(Click事件、DoubleClick事件、SelectedValueChanged事件)都要实现这个方法才可以。
窗体效果: