您的位置:首页 > 编程语言 > C#

带checkbox的C# TreeView处理父子节点选择

2010-11-02 17:57 489 查看
今天写了一个C#的TreeView,需要带checkbox,msdn上TreeView.AfterCheck Event (System.Windows.Forms)之处理了子节点的递归选择问题,贴一下我写的父子节点递归选择。

1 void tree_AfterCheck(object sender, TreeViewEventArgs e)

2 {
3 if (e.Action != TreeViewAction.Unknown)

4 {
5 UpdateCheckStatus(e);

6 }
7 }

8
9 // update check status for parent and child

10 private void UpdateCheckStatus(TreeViewEventArgs e)
11 {

12 CheckAllChildNodes(e.Node);
13 UpdateAllParentNodes(e.Node);

14 }
15

16 // updates all parent nodes recursively.
17 private void UpdateAllParentNodes(TreeNode treeNode)

18 {
19 TreeNode parent = treeNode.Parent;

20 if (parent != null)
21 {

22 if (parent.Checked && !treeNode.Checked)
23 {

24 parent.Checked = false;
25 UpdateAllParentNodes(parent);

26 }
27 else if (!parent.Checked && treeNode.Checked)

28 {
29 bool all = true;

30 foreach (TreeNode node in parent.Nodes)
31 {

32 if (!node.Checked)
33 {

34 all = false;
35 break;

36 }
37 }

38 if (all)
39 {

40 parent.Checked = true;
41 UpdateAllParentNodes(parent);

42 }
43 }

44 }
45 }

46
47 // updates all child tree nodes recursively.

48 private void CheckAllChildNodes(TreeNode treeNode)
49 {

50 foreach (TreeNode node in treeNode.Nodes)
51 {

52 node.Checked = treeNode.Checked;
53 if (node.Nodes.Count > 0)

54 {
55 // If the current node has child nodes, call the CheckAllChildsNodes method recursively.

56 this.CheckAllChildNodes(node);
57 }

58 }
59 }



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐