У меня есть древовидная структура с флажками, и у меня есть следующий обработчик для события "AfterCheck":
private void trvAvailableFiles_AfterCheck(object sender, TreeViewEventArgs e)
{
if (!_isCheckingInProgress)
{
trvAvailableFiles.BeginUpdate();
var nodePath = e.Node.Tag.ToString();
bool isChecked = e.Node.Checked;
e.Node.Nodes.Clear();
try
{
_fileTreeLogic.GetChildNodes(e.Node, true);
e.Node.ExpandAll();
_isCheckingInProgress = true;
SetChildrenCheckState(e.Node, isChecked);
_isCheckingInProgress = false;
}
finally
{
trvAvailableFiles.EndUpdate();
}
}
}
Если вы посмотрите внимательно, вы увидите, что я проверяю, "_isCheckingInProgress". Если это не так, тогда я продолжаю и расширяю все узлы и вызываю метод SetChildrenCheckState (). Проблема, с которой я столкнулся, заключается в том, что SetChildrenCheckState () впоследствии заставит каждый дочерний узел запускать событие AfterCheck для своего собственного узла.
У меня вопрос: есть ли более чистый способ разрешить запуск первого события AfterCheck, но не последующие? Мне кажется, что мне нужно иметь переменную экземпляра bool для проверки и установки.