Ich habe eine Baumansicht mit Kontrollkästchen und ich habe den folgenden Handler für das Ereignis "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();
}
}
}
Wenn Sie genau hinsehen, werden Sie sehen, dass ich prüfe, ob "_isCheckingInProgress". Wenn dies nicht der Fall ist, fahre ich fort, erweitere alle Knoten und rufe die Methode SetChildrenCheckState() auf. Das Problem, auf das ich gestoßen bin, ist, dass SetChildrenCheckState() anschließend dazu führt, dass alle untergeordneten Knoten das AfterCheck-Ereignis für ihren eigenen Knoten auslösen.
Meine Frage ist, gibt es eine saubere Möglichkeit, das erste AfterCheck-Ereignis auslösen, aber nicht die folgenden? Es scheint Art von hackish, dass ich eine Instanz bool-Variable zu überprüfen und zu setzen haben müssen.