分享

使用TreeView中CheckBox

 听风的歌00 2011-11-23
项目设计中要使用TreeView中CheckBox(在TreeView的属性中的CheckBoxes设为ture)。想达到一个这样的效果:

效果

1、选中一个节点,则子节点的状态为当前节点的状态并设置展开或折叠。如:本来默认全部是折叠的,当选择Laboratory并使其Checked为true时,其子节点的状态都为true并展开节点,反之。关闭节点。

2、当子节点中至少一个节点状态为false时,其父节点状态仍为true,但是颜色变为灰色。

这个功能发生的事件是TreeView事件中的AfterCheck

代码如下:

  1. private void tvRoleAll_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
  2. {
  3. if (e.Action != TreeViewAction.Unknown)
  4. {
  5. SetNodeCheckStatus(e.Node, e.Node.Checked);
  6. SetNodeStyle(e.Node);
  7. }
  8. }
  9. private void SetNodeCheckStatus(TreeNode tn, bool Checked)
  10. {
  11. if (tn == null) return;
  12. foreach (TreeNode tnChild in tn.Nodes)
  13. {
  14. tnChild.Checked = Checked;
  15. SetNodeCheckStatus(tnChild, Checked);
  16. }
  17. TreeNode tnParent = tn;
  18. }
  19. private void SetNodeStyle(TreeNode Node)
  20. {
  21. int nNodeCount = 0;
  22. if (Node.Nodes.Count != 0)
  23. {
  24. foreach (TreeNode tnTemp in Node.Nodes)
  25. {
  26. if (tnTemp.Checked == true)
  27. nNodeCount++;
  28. }
  29. if (nNodeCount == Node.Nodes.Count)
  30. {
  31. Node.Checked = true;
  32. Node.ExpandAll();
  33. Node.ForeColor = Color.Black;
  34. }
  35. else if (nNodeCount == 0)
  36. {
  37. Node.Checked = false;
  38. Node.Collapse();
  39. Node.ForeColor = Color.Black;
  40. }
  41. else   
  42. {
  43. Node.Checked = true;
  44. Node.ForeColor = Color.Gray;
  45. }
  46. }
  47. //当前节点选择完后,判断父节点的状态,调用此方法递归。
  48. if (Node.Parent != null)
  49. SetNodeStyle(Node.Parent);
  50. }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多