遍历TreeView
来源:互联网 发布:软件项目风险管理办法 编辑:程序博客网 时间:2024/05/21 10:51
本篇提供遍历TreeView的方法
一 归根结底就是用递归跟树TreeView的初始化是类似的
1 TreeNodeCollection 做参数(这个是找一个checked node,可以替换以相应的处理)
调用时用:Check(treeMenu.Nodes);// treeMenu.Nodes 就只是一个根节点
/// <summary>
/// 遍历TreeView 这里不能用TreeView做参数(无法递归TreeNode不能转换成TreeView),只能用 根节点后在是 节点集合
/// </summary>
/// <param name="tvtemp">节点集 书的nodes集就是它的根节点</param>
protected void Check(TreeNodeCollection tvtemp)
{
foreach (TreeNode temp in tvtemp)
{
if (temp.Checked == true)
{
temp.Checked = false;
break;
}
if (temp.ChildNodes.Count != 0)//如果是iewc:treeview直接写temp.Nodes
{
Check(temp.ChildNodes);
}
}
}
/// 遍历TreeView 这里不能用TreeView做参数(无法递归TreeNode不能转换成TreeView),只能用 根节点后在是 节点集合
/// </summary>
/// <param name="tvtemp">节点集 书的nodes集就是它的根节点</param>
protected void Check(TreeNodeCollection tvtemp)
{
foreach (TreeNode temp in tvtemp)
{
if (temp.Checked == true)
{
temp.Checked = false;
break;
}
if (temp.ChildNodes.Count != 0)//如果是iewc:treeview直接写temp.Nodes
{
Check(temp.ChildNodes);
}
}
}
2 根节点做参数
protected void AllCheck(TreeNode root)
{
if (root.ChildNodes.Count != 0)
foreach (TreeNode temp in root.ChildNodes)
{
if (temp.Checked == true)
{
//do what you want
}
if (temp.ChildNodes.Count != 0)
{
AllCheck(temp.ChildNodes);
}
}
}
{
if (root.ChildNodes.Count != 0)
foreach (TreeNode temp in root.ChildNodes)
{
if (temp.Checked == true)
{
//do what you want
}
if (temp.ChildNodes.Count != 0)
{
AllCheck(temp.ChildNodes);
}
}
}
二 使用栈遍历TreeView
/// <summary>
/// 非递归后序遍历二叉树
/// =Color.Red 表示从右进入
/// =Color.Lavender表示从左进入
/// ==Color.Red 表示从右回来
/// </summary>
/// <param name="tn">当前子树的根</param>
/// <param name="lv">保存结果的列表</param>
private void PreTraWithoutRecurtion(TreeNode tn, ListBox lv)
{
Stack stack = new Stack();
while (tn.ChildNodes.Count != 0)
{
lv.Items.Add(tn.Text);
stack.Push(tn);
tn = tn.ChildNodes[0];
}
lv.Items.Add(tn.Text);
while (stack.Count != 0)
{
TreeNode tn1 = (TreeNode)stack.Pop();
//if (tn.ChildNodes.Count > 1)
//{
for (int i = 1; i < tn1.ChildNodes.Count; i++)
{
tn = tn1.ChildNodes[i];
while (tn.ChildNodes.Count != 0)
{
lv.Items.Add(tn.Text);
stack.Push(tn);
tn = tn.ChildNodes[0];
}
lv.Items.Add(tn.Text);
}
//}
}
}
private void GetTreeViewAll(TreeNode tn, ListBox lv)
{
lv.Items.Add(tn.Text);
Stack stack = new Stack();
for (int i = 0; i < tn.ChildNodes.Count; i++)
{
if (tn.ChildNodes[i].ChildNodes.Count > 0)
{
stack.Push(tn.ChildNodes[i]);
}
lv.Items.Add(tn.ChildNodes[i].Text);
}
while (stack.Count > 0)
{
TreeNode outTn = (TreeNode)stack.Pop();
for (int i = 0; i < outTn.ChildNodes.Count; i++)
{
if (outTn.ChildNodes[i].ChildNodes.Count > 0)
{
stack.Push(outTn.ChildNodes[i]);
}
lv.Items.Add(outTn.ChildNodes[i].Text);
}
}
}
/// 非递归后序遍历二叉树
/// =Color.Red 表示从右进入
/// =Color.Lavender表示从左进入
/// ==Color.Red 表示从右回来
/// </summary>
/// <param name="tn">当前子树的根</param>
/// <param name="lv">保存结果的列表</param>
private void PreTraWithoutRecurtion(TreeNode tn, ListBox lv)
{
Stack stack = new Stack();
while (tn.ChildNodes.Count != 0)
{
lv.Items.Add(tn.Text);
stack.Push(tn);
tn = tn.ChildNodes[0];
}
lv.Items.Add(tn.Text);
while (stack.Count != 0)
{
TreeNode tn1 = (TreeNode)stack.Pop();
//if (tn.ChildNodes.Count > 1)
//{
for (int i = 1; i < tn1.ChildNodes.Count; i++)
{
tn = tn1.ChildNodes[i];
while (tn.ChildNodes.Count != 0)
{
lv.Items.Add(tn.Text);
stack.Push(tn);
tn = tn.ChildNodes[0];
}
lv.Items.Add(tn.Text);
}
//}
}
}
private void GetTreeViewAll(TreeNode tn, ListBox lv)
{
lv.Items.Add(tn.Text);
Stack stack = new Stack();
for (int i = 0; i < tn.ChildNodes.Count; i++)
{
if (tn.ChildNodes[i].ChildNodes.Count > 0)
{
stack.Push(tn.ChildNodes[i]);
}
lv.Items.Add(tn.ChildNodes[i].Text);
}
while (stack.Count > 0)
{
TreeNode outTn = (TreeNode)stack.Pop();
for (int i = 0; i < outTn.ChildNodes.Count; i++)
{
if (outTn.ChildNodes[i].ChildNodes.Count > 0)
{
stack.Push(outTn.ChildNodes[i]);
}
lv.Items.Add(outTn.ChildNodes[i].Text);
}
}
}
- 遍历TreeView
- 遍历 Treeview
- 遍历treeview
- treeview节点遍历
- treeview的遍历
- C# 遍历treeview
- C# 遍历treeview
- treeview遍历----非递归
- C# 遍历treeview
- C# 遍历treeview
- treeview遍历定位
- TreeView控件节点遍历
- treeview 遍历搜索 定位目标
- 实现对TreeView的遍历
- 使用DirectoryEntry,treeview遍历ldap
- 前台遍历TreeView所有节点
- TreeView 树的查找/遍历
- 使用TreeView遍历磁盘目录
- SQLite3 中文文档 3.5.4
- 干掉百度就是这样简单
- cdecl, stdcall pascal fastcall 调用规则小结
- 正则表达式助记口诀 08-01-24
- 80386处理器的寻址方式 (二)
- 遍历TreeView
- 整合Spring和DotNetTools Workflow
- 论程序设计方法
- Oracle常用函数
- 在C#.net中如何操作XML
- 注册的本质
- 为什么 char** 不能自动转化为 const char**
- 售前人员需要具备的素质
- __stdcall与__cdecl的区别