Как убедиться, что ItemCheck происходит перед вызовами внутри метода события
Таким образом, проблема довольно проста на самом деле. У меня есть checkListBox и на ItemCheck я хочу вызвать мой метод UpdateGraph(). Проблема в том, что если я вызываю его в событии, он проходит через метод UpdateGraph до того, как элемент считается проверенным. Поскольку метод графа обновления использует foreach (элемент var в checkListBox.CheckedItems), важно, чтобы новое значение проверено или нет уже применено.
Я попробовал обходной путь, вручную установив новое значение в событии, однако это дало мне исключение StackruException.
private void checkedListBox3_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (e.NewValue == CheckState.Checked)
{
checkedListBox3.SetItemChecked(e.Index, true);
}
else
{
checkedListBox3.SetItemChecked(e.Index, false);
}
UpdateChart();
}
это дает мне исключение на линии, где я SetItemChecked. Просто чтобы подтвердить состояние, я хочу, чтобы элемент проверялся ДО UpdateChart(), и просто вызов UpdateChart(), похоже, не делает этого. У кого-нибудь есть обходные пути, чтобы сделать элемент проверенным, прежде чем он перейдет в метод UpdateChart ()?
РЕДАКТИРОВАТЬ: Спасибо, теперь я понимаю, почему я получил StackruException сейчас, однако есть ли в любом случае, чтобы убедиться, что элемент принимает новый CheckState без ручной передачи его в мой метод UpdateGraph? Это немного универсальный метод, который не всегда будет проходить через мое событие checkedListBox3_itemCheck, поэтому передача в newCheckstate может усложнить ситуацию. Напоминаю, что я могу просто использовать If для проверки моего переданного значения и использовать какой-то идентификатор, чтобы определить, нужно ли его использовать, но это, вероятно, будет моим последним решением, если я не смогу найти что-то еще, чтобы обновить контрольное состояние, прежде чем перейти к метод.
1 ответ
Как то ты указал нет OnItemChecked
Событие, которое происходит после того, как значение установлено, поэтому вам придется подумать о другом:
Вы можете изменить свой метод обновления на что-то вроде UpdateGraph(int? changedIndex = null, bool isChecked = false)
Таким образом, вы можете назвать это так же, как UpdateGraph()
где вы в настоящее время используете его, а затем
private void checkedListBox3_ItemCheck(object sender, ItemCheckEventArgs e)
{
UpdateGraph(e.Index, e.NewValue == CheckState.Checked);
}
После оценки вашего foreach
как обычно, вы можете проверить changedIndex == null
и реагировать соответственно.