带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 }
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 }
相关文章推荐
- C#.Net中TreeView控件右键选择节点问题处理
- C#Winform TreeView节点选择影响其父子节点选中状态(递归)
- C# TreeView的CheckBox 父/子节点点击联动选择效果
- 带checkbox的treeview父子节点的联动选择
- C# winform TreeView中关于checkbox选择的完美类(转载)
- ASP.NET 2.0 TreeView中用JavaScript实现选择子接点CheckBox是自动选择上父节点(或者所有父节点)
- TreeView中父子节点的checkbox的同时选中问题,js控制.
- VS2005 TreeView的checkBox的父子节点级联状态
- 保持TreeView父子节点的CheckBox节点状态一致的一种方法
- 保持TreeView(微软的)父子节点的CheckBox节点状态一致的一种方法
- asp.net TreeView安装、使用(如何将TreeView打包发布)(带CheckBox选择框的TreeView的初始化,TreeView客户端操作:选择父节点后自动选择所有子节点,子节点选择后自动选择父节点)(TreeView节点精确定位)
- asp.net TreeView安装、使用(如何将TreeView打包发布)(带CheckBox选择框的TreeView的初始化,TreeView客户端操作:选择父节点后自动选择所有子节点,子节点选择后自动选择父节点)(TreeView节点精确定位)
- TreeView的checkbox之父子联动处理方法
- C# treeview控件部分节点添加checkbox
- C#中TreeView的CheckBox的两种级联选择
- treeview checkbox选中的时候选择子节点 mvvm
- C# TreeView 控件的父子节点动态生成
- C# winform TreeView中关于checkbox选择的完美类[转]
- 带CheckBox选择框的TreeView的初始化,TreeView客户端操作:选择父节点后自动选择所有子节点,子节点选择后自动选择父节点
- C# WinForm TreeView选择父节点子节点全选