【问题标题】:Treeview Check/Uncheck Parent Node树视图检查/取消选中父节点
【发布时间】:2018-04-05 08:57:33
【问题描述】:

我正在使用TreeView 控件列出我的所有菜单,以便我可以向每个用户授予访问权限。当用户检查一个或多个childnode 时,我将如何强制parent nodecheck = true

parent node 被选中时,我正在使用下面的代码来检查/取消选中所有child nodes

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);                  
       }
     }
  }

【问题讨论】:

标签: c# winforms treeview


【解决方案1】:

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;
   }
}

【讨论】:

  • 差不多,但是当多个子节点中只有一个未选中时,您还需要处理这种情况。
  • @defaultlocale 好点。检查是否检查了任何父子节点应该可以解决问题。将尝试为此编辑存根。
猜你喜欢
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多