C# 不允许在CheckedListBox上取消选中全部

C# 不允许在CheckedListBox上取消选中全部,c#,checkbox,checkedlistbox,C#,Checkbox,Checkedlistbox,我的checkedlistbox有一个条件:只需选中一项。 这意味着更改检查必须取消选中上一项。这很有效。但取消勾选不应该是可行的。通过在尝试取消选中后查看GUI,由于ItemCheck方法中的第二个条件,仍然会检查项目。不可能取消选中当前的检查,它应该是怎样的。但是在离开ItemCheck方法后,已检查项的计数从1变为0属性CheckedItems,即使我可以看到已检查项。我的代码中缺少某些内容: private void myCLB_ItemCheck(object sender

我的checkedlistbox有一个条件:只需选中一项。 这意味着更改检查必须取消选中上一项。这很有效。但取消勾选不应该是可行的。通过在尝试取消选中后查看GUI,由于ItemCheck方法中的第二个条件,仍然会检查项目。不可能取消选中当前的检查,它应该是怎样的。但是在离开ItemCheck方法后,已检查项的计数从1变为0属性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
      }
顺便说一句:使用单选按钮是没有选择的,因为有可能需要使用多个检查。在这种情况下,将禁用上述约束。 我还尝试了第二个条件的其他变体,除了always CheckedItems.Count在ItemCheck方法离开后从1变为0之外,它也起作用。我没有找到验证方法


> PultoNIX建议,当用户提交表单时,应考虑检查实际检查了多少。如果用户选中了框A和框B,但后来又希望选中框C和框D,那么用户很自然地希望取消选中A和B,然后选中C和D。您当前的设计不允许这样做


但是,如果你真的对此感到厌倦,我会考虑在加载窗体或修改复选框时将启用的属性设置为false。因此,如果任何复选框已被修改,您将检查是否只选中了一个复选框,如果是,请锁定该复选框。

您已被选中,但您是否必须选中一个项目,这意味着他们无法取消选中最后一个项目,也无法选中他们真正想要的项目,因为已经选中了一个项目。与其在单击级别对用户进行微观管理,为什么不在用户单击“完成”/“确定”/“提交”时检查检查了多少,并告诉他们有什么问题?他们可以检查他们想要的任何内容,并且始终只检查一个。这是条件,这是用户看到的。他可以更改支票,但无法取消选中。这很完美,但是CheckedItems的计数为0,即使有一个已选中。所以我无法找出哪个被检查。想想看……一旦检查了一个项目,就没有办法在不违反规则的情况下检查另一个项目。这个想法很有趣,但用户应该能够改变他的决定。根据检查,视图将显示结果。因此,用户将不得不决定继续检查或更改它。我现在通过检查SelectedItem而不是CheckedItem来完成。我不知道这是我的误解还是控制中的问题,但这对我来说是完美的。设计不允许这样做,因为它不打算检查多个。那部分工作得很好。为什么要在开始时或在用户修改检查后禁用checkedlistbox?我希望用户能够使用checkedlistbox,而不是看到它被禁用。我不明白。顺便说一句:使用单选按钮是没有选择的,因为可能需要使用多个复选框,但在顶部的粗体部分,只有一个项目需要被选中。是哪一个?是的,在当前实现的基础上,我想添加此行为。在这种情况下,第一个条件将被禁用,然后可以检查多个条件。因此,这已经在没有循环或禁用控件的情况下完成了。剩下的唯一问题是,如何在第二个条件下使用控件来保持checkeditem的状态为checked。