C# 当CheckListBox中的任何CheckState值发生更改时,如何触发事件

C# 当CheckListBox中的任何CheckState值发生更改时,如何触发事件,c#,winforms,checklistbox,C#,Winforms,Checklistbox,我在c#中有一个CheckListBox,每当框中的一个checkstates发生更改时,我都会尝试触发一个事件。事件的目的是更改一些RichTextBox 我有这段代码,但由于某种原因,只有当其中一个复选框从选中变为未选中时,它才会触发事件。 我试图找出我的代码出了什么问题,但没有成功。 任何帮助都将不胜感激 private void clbAllRooms_ItemCheck(object sender, ItemCheckEventArgs e) { //I

我在c#中有一个CheckListBox,每当框中的一个checkstates发生更改时,我都会尝试触发一个事件。事件的目的是更改一些RichTextBox

我有这段代码,但由于某种原因,只有当其中一个复选框从选中变为未选中时,它才会触发事件。 我试图找出我的代码出了什么问题,但没有成功。 任何帮助都将不胜感激

    private void clbAllRooms_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        //If the checkstate changed, update price  
        //It updates price only when the state turns from Checked to Uncheck
        if (e.NewValue != e.CurrentValue)
            Update_rtbPrice();
    }

问题无疑在于Update_rtbPrice()方法。它必须调用列表框的GetItemChecked()方法才能执行一些有意义的操作,这在从事件处理程序调用方法时是个问题。直到事件运行后,项目检查状态才会更改

解决方法是延迟调用,以便在更新控件状态后运行。像这样:

    private void clbAllRooms_ItemCheck(object sender, ItemCheckEventArgs e) {
        this.BeginInvoke(new MethodInvoker(() => Update_rtbPrice()));
    }

那是什么语言?如果你想接触到正确的听众,你应该编辑你的问题以添加适当的标签。至少添加语言名称。您还可以修改问题标题以删除结尾的“>”,非常感谢。。。我整天都在试图解决这个问题……我永远不会想到那个漂亮的球。我没有考虑他在活动期间调用该方法的后果。