CheckedListBox 只允许选中一项

问题描述 投票:0回答:4

在我的

CheckedListBox
应用程序中,我只想允许检查单个项目。

我已经设置了这些属性

checkOnClick = true;
SelectionMode = One;

任何建议将不胜感激

c# winforms checkedlistbox
4个回答
40
投票

取消选中 ItemCheck 事件中的所有其他项目,如下所示:

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) {
      for (int ix = 0; ix < checkedListBox1.Items.Count; ++ix)
        if (ix != e.Index) checkedListBox1.SetItemChecked(ix, false);
    }

9
投票

最好的方法是这样的:

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
    if (e.NewValue == CheckState.Checked && checkedListBox1.CheckedItems.Count > 0)
    {
        checkedListBox1.ItemCheck -= checkedListBox1_ItemCheck;
        checkedListBox1.SetItemChecked(checkedListBox1.CheckedIndices[0], false);
        checkedListBox1.ItemCheck += checkedListBox1_ItemCheck;
    }
}

不循环总是更好。


1
投票

我们也可以通过 checkedListBox1_SelectedIndexChanged 事件来做到这一点。

private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        int idx = checkedListBox1.SelectedIndex;
        for(int i=0;i<checkedListBox1.Items.Count;i++)
        {
            if(i != idx)
            {
                checkedListBox1.SetItemChecked(i, false);
            }
        }
            
    }

0
投票

更新至 Visual 2019

protected void chb_list_SelectedIndexChanged(object sender, EventArgs e)
        {
            int idx = chb_list.SelectedIndex;
            for (int i = 0; i < chb_list.Items.Count; i++)
            {
                if (i != idx)
                {
                    chb_list.Items[i].Selected = false;
                }
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.