我在C#窗口表单应用程序中使用CheckedListBox

我想在一项被选中或未选中之后做些事情,但是ItemCheck事件在该项目被选中/未选中之前运行。
我怎样才能做到这一点?

最佳答案



要在检查项目后运行一些代码,应使用解决方法。

最佳选择

您可以使用此选项(感谢Hans Passantpost):

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
    this.BeginInvoke(new Action(() =>
    {
        //Do the after check tasks here
    }));
}

另一个选项
  • 如果在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
    

    另一个选项

    在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/

    10-14 16:39