您的位置:首页 > 编程语言 > C#

c#checkedListBox设置限制选项个数的问题

2016-06-16 21:53 681 查看
CheckedListBox在使用时没有设置单选多选或选择个数的属性或方法,所以需要自行写代码咯...

No1、注意到CheckedListBox有一个属性SelectionMode,看起来很像选择模式设置,其实它设置的是是否可以对CheckedListBox进行选择,None就是都不能选,One是一次只能选一个。CheckedListBox的设定就是最多一次选一个,(选很多,是多次选择后可以选很多)。所以SelectionMode的后两个是不能用滴。(话说不能用还要设定在这里,真是忽悠宝宝啊~~)

No2、上代码,来说说单选和多选的方法:

单选这样(借鉴其他大神滴):

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (e.CurrentValue == CheckState.Checked) return;//取消选中就不用进行以下操作
for (int i = 0; i < ((CheckedListBox)sender).Items.Count; i++)
{
((CheckedListBox)sender).SetItemChecked(i, false);//将所有选项设为不选中
}
e.NewValue = CheckState.Checked;//刷新
}
Question:为什么将所有选项设置为不选中就实现单选了呢?

Answer:可以这样理解,对于当前你选择的选项,对于其选中的操作在执行完上述代码后执行。意思就是,你先点了小框框,然后执行了上面这段代码,然后又执行了选中代码,打了对勾。

多选这样(自己做下小拓展):

private int NumMax = 2;//任意给值
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{

if (e.CurrentValue == CheckState.Checked) return;
int truecount = 0;
for (int i = 0; i < checkedListBox1.Items.Count; i++)
{
if (checkedListBox1.GetItemChecked(i))
{
truecount++;
}
}
if (truecount >= NumMax)//判断当前选项是否超出限制范围
{
((CheckedListBox)sender).SetItemChecked(beforeindex, false);
}
beforeindex = e.Index;//记住前一次选择的索引值
e.NewValue = CheckState.Checked;
}

以上为最多选两个,这样做了以后的效果是:当我选择第三个的时候,刚刚选择第二个会变为不选中,然后选中当前的第三个和第一个,这样就实现了限制多选个数多选的效果。
感谢CSDN论坛里大神的小提示。关于多选的设计也是费了丢丢逻辑细胞,还好顺利解决了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: