Как вызвать событие при изменении любого из значений 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()));
}