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)