C# TreeView 建立、遍历树(递归)
2021-01-21 13:14
标签:next 链接 原创 tail directory parent cti 树状 else 刚接触treeview这个功能,恶补了几天,博主总结下实现的功能以备用,希望能帮到需要的亲~~ C#gui程序中建立树状结构、遍历树状结构、树状结构节点选中联动(选中父节点时,自动选中其全部子节点,取消选中的某子节点,取消其相应的所有父节点的选中),读取选中节点信息。 0.最初的父节点建立 关于AD域请参考上篇文章:http://blog.csdn.net/heivy/article/details/53505916 ouName :是某部门名称 public void AddTree(TreeNode pNode, string ouName, DirectoryEntry objDE) DirectorySearcher objSearch = new DirectorySearcher(objDE); foreach (DirectoryEntry entry in objEntry.Children) AddTree(cnode, entry.Properties["name"][0].ToString(), objDE); int count = entry.Properties["member"].Count; string memberName = ""; TreeNode node = parent; if (node.FirstNode != null)////如果node节点还有子节点则进入遍历 return checkednodes; if (e.Action == TreeViewAction.ByMouse) } //取消节点选中状态之后,取消所有父节点的选中状态 C# TreeView 建立、遍历树(递归) 标签:next 链接 原创 tail directory parent cti 树状 else 原文地址:https://www.cnblogs.com/ljs-13/p/12109126.html
ParentNode = tv_user.Nodes.Add(OUname);
tv_user.CheckBoxes = true; //表示节点可以进行选中/取消选中操作
1
2
1、增加树的子节点
写了一个函数,(递归调用)实现无限级树结构
此代码是用于遍历AD域,然后输出某部门的树状组织结构
{
TreeNode pnode = pNode, cnode;
objSearch.Filter = "(&(objectClass=organizationalUnit)(ou=" + ouName + "))";
SearchResult objsearchResult = objSearch.FindOne();
DirectoryEntry objEntry = objsearchResult.GetDirectoryEntry();
{
//如果节点是组织单元(即部门)(即存在子节点),则调用函数AddTree()
if (entry.SchemaClassName.Equals("organizationalUnit"))
{
cnode = pnode.Nodes.Add(entry.Properties["name"][0].ToString());
}
//如果节点是群组(即存在子节点),则调用函数AddTree()
else if (entry.SchemaClassName.Equals("group"))
{
cnode = pnode.Nodes.Add(entry.Properties["name"][0].ToString());
for (int i = 1; i {
string tmpName = entry.Properties["member"][i].ToString();
memberName = tmpName.Split(‘,‘)[0].Split(‘=‘)[1].ToString();
cnode.Nodes.Add(memberName);
}
}
else
{
cnode = pnode.Nodes.Add(entry.Properties["name"][0].ToString());
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2.遍历树(读取被选中节点的信息)
public List
{
if (node != null)
{
if (node.Checked == true && node.FirstNode == null)
checkednodes.Add(node.Text);
{
CheckedNodes(node.FirstNode, checkednodes);
}
if (node.NextNode != null)////如果node节点后面有同级节点则进入遍历
{
CheckedNodes(node.NextNode, checkednodes);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
3、节点选中联动功能
在treeview_AfterCheck 事件中调用下面2个函数,如:
{
// textBox1.Text = e.Node.Text;
if (e.Node.Checked == true)
{
//选中节点之后,选中该节点所有的子节点
setChildNodeCheckedState(e.Node, true);
else if (e.Node.Checked == false)
{
//取消节点选中状态之后,取消该节点所有子节点选中状态
setChildNodeCheckedState(e.Node, false);
//如果节点存在父节点,取消父节点的选中状态
if (e.Node.Parent != null)
{
setParentNodeCheckedState(e.Node, false);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
下面是实现节点选中联动的2个子函数:
public void setParentNodeCheckedState(TreeNode currNode, bool state)
{
TreeNode parentNode = currNode.Parent;
parentNode.Checked = state;
if (currNode.Parent.Parent != null)
{
setParentNodeCheckedState(currNode.Parent, state);
}
}
//选中节点之后,选中节点的所有子节点
public void setChildNodeCheckedState(TreeNode currNode, bool state)
{
TreeNodeCollection nodes = currNode.Nodes;
if (nodes.Count > 0)
{
foreach (TreeNode tn in nodes)
{
tn.Checked = state;
setChildNodeCheckedState(tn, state);
}
}
}
————————————————
版权声明:本文为CSDN博主「heivy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/heivy/article/details/53507257
文章标题:C# TreeView 建立、遍历树(递归)
文章链接:http://soscw.com/index.php/essay/45006.html