【问题标题】:CheckedListBox allowing only one item to be checkedCheckedListBox 只允许检查一项
【发布时间】:2012-05-11 14:28:17
【问题描述】:

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

我已经设置了这些属性

checkOnClick = true;
SelectionMode = One;

任何建议将不胜感激

【问题讨论】:

  • 当用户点击列表框时,取消选中其他项。
  • 一组单选按钮会不会更好?
  • CheckedListBox 似乎从 ListBox 继承了 SelectionMode,但忽略了该属性。
  • @akatakritos 选择不同,检查也不同。您可以选择但未选中的内容。

标签: c# winforms checkedlistbox


【解决方案1】:

取消选中 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);
    }

【讨论】:

  • 谢谢,我想一定有一个简单的属性可以做到。
  • 更简单的是单选按钮,客户习惯单选按钮只是一个选择,而复选框是多选,在像这样强制更改之前要非常小心
  • @Ahmed 正如 RhysW 所说,您最好使用单选按钮...但是如果您必须使用复选框,那么这种方式就可以了..
  • @Sam1 当然这样会更好,但在这种情况下,我遇到了一个特殊的不同场景,这种方法最适合。
  • @Ahmed 正如我所说,如果你必须使用它,那么没有理由不使用它:)
【解决方案2】:

最好的方法是这样的:

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;
    }
}

没有循环总是更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2020-03-10
    • 1970-01-01
    • 2018-10-25
    相关资源
    最近更新 更多