winform实现TreeView控件的节点搜索功能

如图所示我要实现在搜索里输入“控规”指定查询内容,则匹配到的所有节点的父节点展开并且该节点加深颜色显示;
winform实现TreeView控件的节点搜索功能winform实现TreeView控件的节点搜索功能
代码思路:先用String.Contains()匹配查询内容找到所有符合查询的节点,然后对这些节点进行展开并高亮显示。
具体代码:
1、搜索按钮下代码:

        List<TreeNode> searchtreeNodes;
       private void searchtoolbutton_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(searchtooltext.Text))
            {
                MessageBox.Show("请输入搜索内容!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            searchtreeNodes = new List<TreeNode>();
            foreach (TreeNode node in tvMapLyMgr.Nodes)
            {
                SearchLayer(node, this.searchtooltext.Text);

            }
            for (int i = 0; i < searchtreeNodes.Count; i++)
            {
                TreeNode temp = searchtreeNodes[i];
                ExpandNode(temp);
                if (i == 0 && temp.Parent != null)
                {
                    tvMapLyMgr.SelectedNode = temp.Parent;
                }
                temp.BackColor = Color.Blue;
            }
        }

2、寻找方法和展开树节点方法

       private void SearchLayer(TreeNode node, string name)
        {
            if (node.Nodes.Count != 0)
            {
                for (int i = 0; i < node.Nodes.Count; i++)
                {
                    SearchLayer(node.Nodes[i], name);
                }
            }
            else if (string.Equals(node.Text, name) || node.Text.Contains(name))
            {
                searchtreeNodes.Add(node);
            }
        }

        private void ExpandNode(TreeNode node)
        {
            if (node.Parent != null)
            {
                node.Expand();
                ExpandNode(node.Parent);
            }
        }