如何更改CheckListBox中的任何CheckState值时触发事件

时间:2012-01-16 13:38:05

标签: c# winforms checklistbox

我在c#中有一个CheckListBox,我试图在每次更改框中的一个检查状态时触发事件。事件的目的是更改一些RichTextBox。

我有这段代码,但是只有当其中一个复选框从c​​heck变为unchecked时,它才会触发事件。 我试图弄清楚我的代码有什么问题但没有成功。 任何帮助将不胜感激。

    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();
    }

1 个答案:

答案 0 :(得分:1)

麻烦无疑位于您的Update_rtbPrice()方法中。它必须调用列表框'GetItemChecked()方法来做一些有意义的事情,当你从事件处理程序调用方法时这是一个问题。在事件运行之后,项目检查状态不会改变。

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

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