TreeView复选框选择逻辑判断

在mobile里使用TreeView控件时,控件本身没有提供节点复选框选择判断逻辑。

如选中父节点,所有子节点全部选中;

取消父节点,同时也取消所有子节点;

或者选中所有子节点,父节点自动选中等等。

 

以下代码能够实现:

 

view plaincopy to clipboardprint?

  1. /// <summary>   
  2. /// 复选框点击事件   
  3.  /// </summary>   
  4. /// <param name="sender"></param>   
  5. /// <param name="e"></param>   
  6. private void tvPeople_AfterCheck(object sender, TreeViewEventArgs e)  
  7. {  
  8.     if (e.Action != TreeViewAction.Unknown)  
  9.     {  
  10.         if (e.Node.Nodes.Count > 0)  
  11.         {  
  12.             this.CheckAllChildNodes(e.Node, e.Node.Checked);  
  13.         }  
  14.         CheckParentNodes(e.Node);  
  15.     }  
  16. }  
  17.   
  18. /// <summary>   
  19. /// 递归设置子节点   
  20. /// </summary>   
  21. /// <param name="treeNode">节点对象</param>   
  22. /// <param name="nodeChecked">是否选择</param>   
  23. private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)  
  24. {  
  25.     foreach (TreeNode node in treeNode.Nodes)  
  26.     {  
  27.         node.Checked = nodeChecked;  
  28.         if (node.Nodes.Count > 0)  
  29.         {  
  30.             this.CheckAllChildNodes(node, nodeChecked);  
  31.         }  
  32.     }  
  33. }  
  34.   
  35. /// <summary>   
  36. /// 递归设置父节点   
  37. /// </summary>   
  38. /// <param name="treeNode"></param>   
  39. private void CheckParentNodes(TreeNode treeNode)  
  40. {  
  41.     if (null != treeNode.Parent)  
  42.     {  
  43.         int count = treeNode.Parent.Nodes.Count;  
  44.         if (treeNode.Checked == true)  
  45.         {  
  46.             for (int i = 0; i < count; i++)  
  47.             {  
  48.                 if (treeNode.Parent.Nodes[i].Checked == false)  
  49.                     break;  
  50.                 if (i == count - 1)  
  51.                     treeNode.Parent.Checked = true;  
  52.             }  
  53.         }  
  54.         else  
  55.         {  
  56.             for (int i = 0; i < count; i++)  
  57.             {  
  58.                 if (treeNode.Parent.Nodes[i].Checked == true)  
  59.                     break;  
  60.                 if (i == count - 1)  
  61.                     treeNode.Parent.Checked = false;  
  62.             }  
  63.         }  
  64.         CheckParentNodes(treeNode.Parent);  
  65.     }  
  66. }  
原文地址:https://www.cnblogs.com/flyptt/p/2317542.html