禁止在CheckedListBox上取消选中全部

时间:2015-02-12 18:33:18

标签: c# checkbox checkedlistbox uncheck

我的checkedlistbox有一个条件:必须检查一个项目。 这意味着更改检查必须取消选中上一项。这样可行。 但是取消选中不应该。通过在取消选中后查看GUI,由于ItemCheck-Method中的第二个条件,仍然会检查该项目。它不可能取消选中当前的检查,它应该如何。但是在离开ItemCheck-Method之后,已检查项目的数量从1变为0(Property CheckedItems),即使我可以看到已检查的项目。我的代码中缺少一些东西:

      private void myCLB_ItemCheck(object sender, ItemCheckEventArgs e)
      {
         // 1. Checking one will uncheck all other, works perfectly
         if (e.NewValue == CheckState.Checked && myCLB.CheckedItems.Count > 0)
         {
            myCLB.ItemCheck -= myCLB_ItemCheck;
            myCLB.SetItemChecked(myCLB.CheckedIndices[0], false);
            myCLB.ItemCheck += myCLB_ItemCheck;
         }

         // 2. Unchecking without checking another not allowed
         if (myCLB.CheckedItems.Count > 0 &&
             myCLB.CheckedItems[0].Equals((sender as CheckedListBox).SelectedItem))
         {
            e.NewValue = CheckState.Checked;
            return;
         }

         // ... do some business here, depending on the check
      }

顺便说一句:使用radiobuttons是没有选择的,因为可能需要使用多个检查。在这种情况下,将禁用上述约束。 我还尝试了第二个条件的其他变体,除了在剩下ItemCheck-Method之后CheckedItems.Count从1变为0之外,它也起作用了。我没有找到验证方法。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

正如Plutonix建议的那样,您应该考虑在用户提交表单时检查实际检查的数量。如果用户选中了方框A和B,但后来要检查方框C和D,则用户想要取消选中A和B,然后检查C和D是很自然的。您当前的设计不允许此

但是,如果你真的 ,我会考虑在加载表单或修改复选框时将Enabled属性设置为False 。因此,如果修改了任何复选框,您将检查是否只选中了一个复选框,如果是,则将其锁定。