C# 如果未选中所有CheckedListbox项,如何禁用按钮

C# 如果未选中所有CheckedListbox项,如何禁用按钮,c#,winforms,C#,Winforms,如果用户取消选中我的CheckedListBox中的所有项目,我想禁用一个按钮。先看一下我的代码: void checkedListBoxChannels_ItemCheck(object sender, ItemCheckEventArgs e) { ... if (this.checkedListBoxChannels.CheckedItems.Count == 0) { this.btnOK.Enabled = false;

如果用户取消选中我的CheckedListBox中的所有项目,我想禁用一个按钮。先看一下我的代码:

void checkedListBoxChannels_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        ...

        if (this.checkedListBoxChannels.CheckedItems.Count == 0) {
            this.btnOK.Enabled = false;
        }
        else {
            this.btnOK.Enabled = true;
        }           
    }
现在的问题是:当我取消选中最后一个复选框并且if块中的检查完成时,CheckedItems.Count仍然是1,所以按钮不会被禁用。当我在没有选中复选框之后选中第一个复选框时,出现了相同的问题。计数为0,因此“我的按钮”被禁用

那么,是否有可能找到CheckedListBox控件当前(在用户单击之后)选中或未选中的项?我搜索了EventArgs和sender属性,但找不到任何内容


谢谢你的帮助

你的病情应该会好转

this.checkedListBoxChannels.CheckedItems.Count > 0

如果您查看msdn文档

在"评论"下说: “只有在ItemCheck事件发生后,才会更新检查状态。” 所以它不会记录你最后的变化。
您还可以使用其他事件。(单击或选择索引更改?

确定我将代码更改为:

if (this.checkedListBoxChannels.CheckedItems.Count == 1) {
            if (e.NewValue == CheckState.Unchecked) {
                this.btnOK.Enabled = false;
            }
        }
        else {
            this.btnOK.Enabled = true;
        }

现在它可以正常工作了

您可以使用ItemCheckEventArgs的NewValue属性:

 private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        if (checkedListBox1.CheckedItems.Count > 1)
        {
            button1.Enabled = true;
            return;

        }

        //Last Item is uncheked
        if (checkedListBox1.CheckedItems.Count == 1 && e.NewValue == CheckState.Unchecked)
        {
            button1.Enabled = false;
            return;
        }

        //First Item is checked
        if (checkedListBox1.CheckedItems.Count == 0 && e.NewValue == CheckState.Checked)
        {
            button1.Enabled = true;
            return;
        }
    }

这不管用。如果取消选中最后一个复选框,则计数为1,因此按钮不会被禁用。