我有一个包含两个元素的表单:CheckedListBox
和CheckBox
。 CheckBox
,称为SelectAllCheckBox
,用于检查/取消选中CheckedListBox
中的所有项目。我通过与CheckedChanged
关联的SelectAllCheckBox
事件处理程序来实现此目的,因此,在选中该事件时,将检查CheckedListBox
中的所有项目,反之亦然。这很好。
我还具有当用户取消选中SelectAllCheckBox
中的复选框之一时取消选中CheckedListBox
的代码。例如,如果用户选中SelectAllCheckBox
,然后取消选中其中一项,则应取消选中“全选CheckBox
”。这是通过CheckedListBox.ItemChecked
事件处理程序实现的。这也很好。
我的问题是,当以编程方式取消选中SelectAllCheckBox
时(如上述情况),其事件处理程序将导致CheckedListBox
中的所有项目变为未选中状态。
我确定其他人也会遇到我的问题;有一个优雅的解决方法吗?
最佳答案
另一种方法是利用以下事实:当您以编程方式选中/取消选中时,它不会将焦点集中在复选框上。因此,您可以将Focused
属性用作标志。
private void SelectAllCheckBox_CheckedChanged(object sender, EventArgs e)
{
if(!((CheckBox)sender).Focused)
return;
//your code to uncheck/check all CheckedListBox here
}
无需创建另一个单独的bool标志(除非您在某处手动更改焦点状态)。
关于c# - 选择所有复选框和CheckedListBox,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18339966/