Как вызвать событие при изменении любого из значений CheckState в CheckListBox

У меня есть CheckListBox в C#, и я пытаюсь вызвать событие всякий раз, когда изменяется одно из контрольных состояний в поле. Цель события - изменить 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();
    }

1 ответ

Решение

Проблема, без сомнения, находится в вашем методе Update_rtbPrice(). Чтобы сделать что-то осмысленное, нужно вызвать метод GetItemChecked() окна списка, и это проблема, когда вы вызываете метод из обработчика события. Состояние проверки элемента не изменяется до тех пор, пока не будет выполнено событие.

Обходной путь - отложить вызов, чтобы он выполнялся после обновления состояния элемента управления. Как это:

    private void clbAllRooms_ItemCheck(object sender, ItemCheckEventArgs e) {
        this.BeginInvoke(new MethodInvoker(() => Update_rtbPrice()));
    }
Другие вопросы по тегам