C# Treeview选中/取消选中父节点
我正在使用C# Treeview选中/取消选中父节点,c#,winforms,treeview,C#,Winforms,Treeview,我正在使用TreeView控件列出我的所有菜单,这样我就可以为每个用户提供访问权限。当用户选中一个或多个childnode时,如何强制父节点check=true 当选中父节点时,我使用下面的代码选中/取消选中所有子节点 private void treeView_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Action != TreeViewAction.Unknown) { if (e.Nod
TreeView
控件列出我的所有菜单,这样我就可以为每个用户提供访问权限。当用户选中一个或多个childnode
时,如何强制父节点check=true
当选中父节点时,我使用下面的代码选中/取消选中所有子节点
private void treeView_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Action != TreeViewAction.Unknown)
{
if (e.Node.Nodes.Count > 0)
{
CheckAllChildNodes(e.Node, e.Node.Checked);
}
}
}
private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
{
foreach (TreeNode node in treeNode.Nodes)
{
node.Checked = nodeChecked;
if (node.Nodes.Count > 0)
{
this.CheckAllChildNodes(node, nodeChecked);
}
}
}
TreeNode有一个“父”属性,这将使它变得简单。未经测试的代码,但应该给你一个想法
private void CheckAllParentNodes(TreeNode treeNode, bool nodeChecked)
{
TreeNode parentNode = treeNode.Parent;
while (parentNode != null)
{
// check if parent has still checked child nodes
if (parent.Nodes.Any(n => n.Checked)) return;
parentNode.Checked = nodeChecked;
parentNode = parentNode.Parent;
}
}
可能与About right重复,但您还需要处理多个子节点中只有一个未选中的情况。@defaultlocale很好。检查是否检查了任何父节点和子节点应该可以做到这一点。将尝试为此编辑存根。