Я в настоящее время разрабатываю приложение Окна, которое использует CheckedListBoxes для определенных аспектов программы. Проблема, с которой я встретился, состоит в том, что я пытался найти, какое событие инициировано, когда объект проверяется так, чтобы я мог включить кнопку формы, когда любой элемент списка проверяется.
Проблема состоит в том, что я пытался использовать следующее;
private void clbAvailMods_ItemCheck(object sender, ItemCheckEventArgs e)
{
if(e.NewValue == CheckState.Checked)
{
btnInstall.Enabled = true;
}
}
но когда я установил точку останова на, если оператор, она никогда не стреляет в проверку объекта в поле списка.
Я делаю что-то не так здесь?
Стандартным приемом Windows Forms является задержка выполнения кода до завершения всех побочных эффектов события. Вы откладываете выполнение кода с помощью метода Control.BeginInvoke(). Это решит вашу проблему:
private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e) {
this.BeginInvoke(new MethodInvoker(evalList), null);
}
private void evalList() {
bool any = false;
for (int ix = 0; ix < checkedListBox1.Items.Count; ++ix) {
if (checkedListBox1.GetItemChecked(ix)) {
any = true;
break;
}
}
btnInstall.Enabled = any;
}
Я думаю, что это событие SelectedIndexChanged, но я подтверждаю прямо сейчас.
РЕДАКТИРОВАТЬ: событие SelectedIndexChanged работает. Но это срабатывает независимо от того, установлен ли флажок. Поэтому я бы проверил отмеченное состояние, если вы хотите это сделать.
Но, кстати, когда я использовал событие ItemCheck, оно сработало, когда я действительно установил флажок, а не только текст.
Пара потенциальных ошибок. Предположительно, вы добавили событие через графический интерфейс VS.Net, чтобы убедиться, что оно подключено к элементу управления. Попробуйте дважды щелкнуть элемент - один раз для фокусировки элемента и еще раз для переключения состояния проверки - если вы хотите, чтобы состояние проверки элемента переключалось при первом щелчке, установите для свойства «CheckOnClick» значение true.