Это старый пост, хотя ни одно из предложенных решений не работает в моем случае.
Итак, я сделал следующее:
private TreeNode uncheck_treeview(TreeView treeView, TreeNode treeNode, TreeViewEventHandler e)
{
treeView.AfterCheck -= e;
foreach (TreeNode node in treeView.Nodes)
{
uncheck_treenode_tree(node);
}
if (treeNode != null)
{
treeNode.Checked = true;
}
treeView.AfterCheck += e;
return treeNode;
}
и
private void uncheck_treenode(TreeNode treeNode)
{
treeNode.Checked = false;
foreach (TreeNode node in treeNode.Nodes)
{
uncheck_treenode_tree(node);
}
}
и
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
var checkedNode = uncheck_treeview_tree((TreeView) sender, e.Node, treeView1_AfterCheck);
// further processing ...
}
обратите внимание, что этот метод предотвращает StackOverflowException
!
надежда, полезная для других