递归的遍历TreeView中的所有结点 方法2

来源:互联网 发布:垃圾清理软件 编辑:程序博客网 时间:2024/06/06 00:09
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace TEST{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();            // 给目录树添加结点            TreeNode group_animal = new TreeNode("动物");            TreeNode subgroup_animal = new TreeNode("哺乳动物");            TreeNode a1 = new TreeNode("小狗");            TreeNode a2 = new TreeNode("小猪");            TreeNode a3 = new TreeNode("小羊");            subgroup_animal.Nodes.Add(a1);            subgroup_animal.Nodes.Add(a2);            subgroup_animal.Nodes.Add(a3);            group_animal.Nodes.Add(subgroup_animal);            TreeNode subgroup_animal2 = new TreeNode("海洋动物");            TreeNode b1 = new TreeNode("鲨鱼");            TreeNode b2 = new TreeNode("鲸鱼");            TreeNode b3 = new TreeNode("泥鳅");            subgroup_animal2.Nodes.Add(b1);            subgroup_animal2.Nodes.Add(b2);            subgroup_animal2.Nodes.Add(b3);            group_animal.Nodes.Add(subgroup_animal);            group_animal.Nodes.Add(subgroup_animal2);            this.treeView1.Nodes.Add(group_animal);            TreeNode goup_plant = new TreeNode("植物");            this.treeView1.Nodes.Add(goup_plant);            TreeNode zhongzhiwu = new TreeNode("种植物");            TreeNode beifang = new TreeNode("北方种植物");            TreeNode nanfang = new TreeNode("南方种植物");            zhongzhiwu.Nodes.Add(beifang);            zhongzhiwu.Nodes.Add(nanfang);            goup_plant.Nodes.Add(zhongzhiwu);            TreeNode wheet = new TreeNode("小麦");            TreeNode corn = new TreeNode("玉米");            beifang.Nodes.Add(wheet);            beifang.Nodes.Add(corn);            TreeNode rice = new TreeNode("大米");            TreeNode ganzhe = new TreeNode("甘蔗");            nanfang.Nodes.Add(rice);            nanfang.Nodes.Add(ganzhe);        }        private void button_Click(object sender, EventArgs e)        {            // 递归的对TreeView进行            //foreach (TreeNode t in treeView1.Nodes)            //{            //    TreeNode temp = SearchTreeNode(t, textBox1.Text);            //    if (temp!=null)            //    {            //        this.treeView1.SelectedNode = temp;            //        this.treeView1.Focus();            //        return;            //    }            //}                 TreeNode node = SearchTreeNode_2(treeView1.Nodes, textBox1.Text);            if (node!=null)            {                this.treeView1.SelectedNode = node;                this.treeView1.Focus();            }        }        private TreeNode SearchTreeNode(TreeNode node, string name)        {            // 如果没有子节点,则返回到上一层调用            if (node==null)            {                return null;            }            else            {                // 函数返回运行                if (node.Text.ToLower().Contains(name.ToLower()))                {                    //                     return node;                }                TreeNode result =null;                foreach (TreeNode t in node.Nodes)                {                    // 遍历所有的子节点                    result = SearchTreeNode(t, name);                    if (result!=null)                    {                        return result;                    }                }                return result;            }        }        private TreeNode SearchTreeNode_2(TreeNodeCollection TNC, string name)        {            if (TNC == null)            {                // 没有子节点,说明已经到树的叶子结点的后面,函数应该返回                return null;            }            else            {                // 访问当前结点集合                TreeNode result = null;               foreach (TreeNode node in TNC)               {                   if (node.Text.ToLower().Contains(name.ToLower()))                   {                       result = node;                       return result;                   }                   result = SearchTreeNode_2(node.Nodes, name);                   if (result!=null)                   {                       return result;                   }               }               return result;            }        }    }}