C# TreeView检查/取消检查子代-有时只影响根
考虑一个C# TreeView检查/取消检查子代-有时只影响根,c#,.net,winforms,treeview,C#,.net,Winforms,Treeview,考虑一个TreeView结构,例如: 目标是在检查特定节点时,让节点的子代相应地检查或取消检查自己。例如,在上面的示例中,如果未选中“D”,则“da”、“da”和“dab”应自行取消选中 目前使用的代码如下: private void treeView_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Action != TreeViewAction.Unknown) { if (e.Node.Chec
TreeView
结构,例如:
目标是在检查特定节点时,让节点的子代相应地检查或取消检查自己。例如,在上面的示例中,如果未选中“D”,则“da”、“da”和“dab”应自行取消选中
目前使用的代码如下:
private void treeView_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Action != TreeViewAction.Unknown)
{
if (e.Node.Checked)
{
checkChildNodes(e.Node.Nodes);
}
else
{
uncheckChildNodes(e.Node.Nodes);
}
}
}
private void checkChildNodes(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
node.Checked = true;
if (node.Nodes.Count>0)
checkChildNodes(node.Nodes);
}
}
private void uncheckChildNodes(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
node.Checked = false;
if (node.Nodes.Count>0)
uncheckChildNodes(node.Nodes);
}
}
这样做的问题是,当快速单击“根”节点时,有时不会检查/取消检查子体。如何解决这个问题
还尝试了使用
BeforeCheck
事件,如下链接所示:是否在node.Checked=…”时调用treeView\u AfterCheck
是否在取消选中ChildNodes
方法中更改了code>?如果是,则添加一个bool isAdjusting=false代码>变量。在treeView\u AfterCheck
方法中,输入if(isAdjusting)返回;i调整=正确
然后设置isAdjusting=false代码>结尾。是否在node.Checked=…]时调用treeView_AfterCheck
是否在取消选中ChildNodes
方法中更改了code>?如果是,则添加一个bool isAdjusting=false代码>变量。在treeView\u AfterCheck
方法中,输入if(isAdjusting)返回;i调整=正确
然后设置isAdjusting=false代码>在末尾。