Windows C#CheckedListBox Checked Item事件处理

rik*_*vis 7 c# events visual-studio-2005 checkedlistbox

我目前正在开发一个Window应用程序,它使用CheckedListBoxes来实现程序的某些方面.我遇到的一个问题是,我一直在尝试查找项目被选中时触发了哪个事件,这样我就可以在选中任何列表项时启用表单按钮.

问题是我尝试使用以下内容;

private void clbAvailMods_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        if(e.NewValue == CheckState.Checked)
        {
            btnInstall.Enabled = true;
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是当我在if语句上设置断点时,它永远不会在检查列表框中的项目时触发.

我在这里做错了吗?

Han*_*ant 20

标准的Windows Forms技巧是延迟运行代码,直到所有事件副作用都完成.您使用Control.BeginInvoke()方法延迟运行代码.这将解决您的问题:

    private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e) {
        this.BeginInvoke(new MethodInvoker(evalList), null);
    }

    private void evalList() {
        bool any = false;
        for (int ix = 0; ix < checkedListBox1.Items.Count; ++ix) {
            if (checkedListBox1.GetItemChecked(ix)) {
                any = true;
                break;
            }
        }
        btnInstall.Enabled = any;
    }
Run Code Online (Sandbox Code Playgroud)