我有一个包含两个元素的表单:CheckedListBoxCheckBoxCheckBox,称为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/

10-09 01:08