Poniższy kod pochodzi bezpośrednio z firmy Microsoft pod numerem http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.aftercheck%28VS.80%29.aspx.Widok drzewa WinForm, rekurencyjnie sprawdź problem węzłów podrzędnych
// Updates all child tree nodes recursively.
private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
{
foreach (TreeNode node in treeNode.Nodes)
{
node.Checked = nodeChecked;
if (node.Nodes.Count > 0)
{
// If the current node has child nodes, call the CheckAllChildsNodes method recursively.
this.CheckAllChildNodes(node, nodeChecked);
}
}
}
// NOTE This code can be added to the BeforeCheck event handler instead of the AfterCheck event.
// After a tree node's Checked property is changed, all its child nodes are updated to the same value.
private void node_AfterCheck(object sender, TreeViewEventArgs e)
{
// The code only executes if the user caused the checked state to change.
if (e.Action != TreeViewAction.Unknown)
{
if (e.Node.Nodes.Count > 0)
{
/* Calls the CheckAllChildNodes method, passing in the current
Checked value of the TreeNode whose checked state changed. */
this.CheckAllChildNodes(e.Node, e.Node.Checked);
}
}
}
umieścić go w formie zawierającej katalogów i nazywają node_AfterCheck na (niespodzianka) terminem katalogów AfterCheck. Następnie rekursywnie sprawdza lub odznacza węzły podrzędne w widoku drzewa.
Jeśli jednak faktycznie to wypróbujesz i klikniesz kilka razy w tym samym oknie wyboru drzewa wystarczająco szybko, węzły podrzędne będą kończyły z niezsynchronizowaną kontrolą z rodzica. Prawdopodobnie potrzebujesz kilku poziomów dzieci z maksymalnie 100 dziećmi, aby aktualizacja interfejsu użytkownika była wystarczająco powolna, aby zauważyć, że tak się dzieje.
Próbowałem kilka rzeczy (na przykład wyłączenie kontroli widoku drzewa na początku node_AfterCheck i ponowne włączenie na końcu), ale problem z niesynchronizowaniem nadal występuje.
Wszelkie pomysły?
ja pisał mój obejście w temacie dzieci z tego: http://stackoverflow.com/questions/14699102/treeview-check-uncheck-all-child-items/23065225#23065225 –