我在C#窗口表单应用程序中使用CheckedListBox
。
我想在一项被选中或未选中之后做些事情,但是ItemCheck
事件在该项目被选中/未选中之前运行。
我怎样才能做到这一点?
最佳答案
要在检查项目后运行一些代码,应使用解决方法。
最佳选择
您可以使用此选项(感谢Hans Passant的post):
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
this.BeginInvoke(new Action(() =>
{
//Do the after check tasks here
}));
}
另一个选项
e.NewValue
而不是checkedListBox1.GetItemChecked(i)
使用代码:
var checkedIndices = this.checkedListBox1.CheckedIndices.Cast<int>().ToList();
if (e.NewValue == CheckState.Checked)
checkedIndices.Add(e.Index);
else
if(checkedIndices.Contains(e.Index))
checkedIndices.Remove(e.Index);
//now you can do what you need to checkedIndices
//Here if after check but you should use the local variable checkedIndices
//to find checked indices
另一个选项
在ItemCheck事件的中间,删除ItemCheck的处理程序,SetItemCheckState,然后添加处理程序。
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
var control = (CheckedListBox)sender;
// Remove handler
control.ItemCheck -= checkedListBox_ItemCheck;
control.SetItemCheckState(e.Index, e.NewValue);
// Add handler again
control.ItemCheck += checkedListBox_ItemCheck;
//Here is After Check, do additional stuff here
}
关于c# - 管理CheckedListBox ItemCheck事件,使其在未选中项目之前运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32291324/