我的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之外,它也起作用了。我没有找到验证方法。
非常感谢任何帮助。
答案 0 :(得分:0)
正如Plutonix建议的那样,您应该考虑在用户提交表单时检查实际检查的数量。如果用户选中了方框A和B,但后来要检查方框C和D,则用户想要取消选中A和B,然后检查C和D是很自然的。您当前的设计不允许此
但是,如果你真的 ,我会考虑在加载表单或修改复选框时将Enabled
属性设置为False
。因此,如果修改了任何复选框,您将检查是否只选中了一个复选框,如果是,则将其锁定。