如果所有checklistbox项都未选中,如何禁用按钮

本文关键字:何禁用 按钮 checklistbox 如果 | 更新日期: 2023-09-27 18:05:14

我想禁用一个按钮,如果用户取消选中我的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。计数仍然是1,所以按钮不会被禁用。同样的问题,当我检查第一个复选框后,没有复选框被选中。计数为0,因此我的按钮被禁用。

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

谢谢你的帮助

如果所有checklistbox项都未选中,如何禁用按钮

我把代码改成:

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

如果你看msdn文档

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

在"备注"下面写着:"直到ItemCheck事件发生后,检查状态才会更新。"所以它不会注册你的最后一次更改。你还可以使用其他事件。

您可以使用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;
        }
    }

你的情况应该是

this.checkedListBoxChannels.CheckedItems.Count > 0