如果取消选中所有CheckedListbox项,如何禁用按钮

时间:2014-05-27 09:34:19

标签: c# winforms

如果用户取消选中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,因此按钮不会被禁用。在没有勾选复选框后检查第一个复选框时出现同样的问题。 Count为0,因此我的按钮被禁用。

那么是否有可能找出CheckedListBox控件的当前(点击用户之后)已选中或未选中的项目?我搜索了EventArgs和发件人属性,但我找不到任何东西。

感谢您的帮助

4 个答案:

答案 0 :(得分:2)

好的,我将我的代码更改为:

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

现在它的工作正常。

答案 1 :(得分:0)

你的病情应该是

this.checkedListBoxChannels.CheckedItems.Count > 0

答案 2 :(得分:0)

如果查看msdn文档

http://msdn.microsoft.com/en-us/library/system.windows.forms.checkedlistbox.itemcheck%28v=vs.110%29.aspx

在“备注”下,它说: “直到ItemCheck事件发生后才检查状态。” 所以它不会注册你的最后一次更改。 您还可以使用其他活动。 (可能是Click或SelectedIndexChanged?)

答案 3 :(得分:0)

您可以使用ItemCheckEventArgs e:

的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;
        }
    }