现在的位置: 首页 > 综合 > 正文

遍历TreeView

2019年11月19日 ⁄ 综合 ⁄ 共 2933字 ⁄ 字号 评论关闭

本篇提供遍历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);
            }
        }
    }

 

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);
                }
            }
    }

 

二 使用栈遍历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);
            }
        }
    }

 

 

抱歉!评论已关闭.