Как убедиться, что 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 и реагировать соответственно.

Другие вопросы по тегам