У меня есть элемент управления CheckedListBox и кнопка в моем проекте WinForms. Он содержит список элементов, и можно выбрать максимум 5. Я использую событие ItemCheck
, поэтому каждый раз, когда пользователь проверяет или снимает отметку с элемента в списке, вызывается функция, которая снимает отметку с последнего значения, если общее количество выбранных элементов было больше 5:
private void NumbersListItemChecked(object sender, ItemCheckEventArgs e)
{
CheckedListBox checkedItems = (CheckedListBox)sender;
if (checkedItems.CheckedItems.Count > 4)
{
e.NewValue = CheckState.Unchecked;
}
RefreshButtonState();
}
Таким образом, количество отмеченных элементов никогда не будет превышать 5.
Предполагается, что элемент управления кнопки будет отключен, если количество отмеченных элементов в моем CheckedListBox не равно 5, и включено, если оно есть. Я пытаюсь вызвать эту функцию всякий раз, когда происходит изменение в состоянии:
private void RefreshButtonState()
{
if (NumbersList.CheckedItems.Count == 5)
{
ModifyButton.Enabled = true;
}
else
{
ModifyButton.Enabled = false;
}
}
Однако кнопка остается отключенной, даже если у меня проверено 5 пунктов, пока я не попытаюсь проверить шестой, и наоборот - если Я проверяю 5, а затем снимаю галочку, кнопка станет активной. Я знаю, что это происходит потому, что функция вызывается до фактического изменения.
Есть ли событие для CheckedListBox, которое вызывается сразу после изменения состояния, а не когда изменить?