mos*_*her 4 .net c# checkedlistbox winforms
我CheckedListBox在C#Window Forms Application中使用.
我想在检查或取消选中一个项目后执行某些操作,但ItemCheck事件在项目选中/取消选中之前运行.我怎样才能做到这一点?
Rez*_*aei 13
在ItemCheck事件发生之前,检查状态不会更新.
要在选中项目后运行某些代码,您应该使用解决方法.
最佳选择
你可以使用这个选项(感谢Hans Passant的这篇文章):
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
this.BeginInvoke(new Action(() =>
{
//Do the after check tasks here
}));
}
Run Code Online (Sandbox Code Playgroud)
另外一个选项
如果在ItemCheck事件的中间,你需要知道项目的状态,你应该使用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
Run Code Online (Sandbox Code Playgroud)
另外一个选项
在ItemCheck事件的中间,删除ItemCheck,SetItemCheckState的处理程序,然后添加处理程序egain.
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
}
Run Code Online (Sandbox Code Playgroud)