Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Treeview选中/取消选中父节点_C#_Winforms_Treeview - Fatal编程技术网

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很好。检查是否检查了任何父节点和子节点应该可以做到这一点。将尝试为此编辑存根。