有时候需要访问TreeView中的所有结点,在所有结点中查找相关信息。
下面给出递归的遍历所有结点的代码,以及TreeView的构建代码
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;
}
}
}
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;
}
}
}
}
程序界面如图:我个人这边小麦结点是选中的,不知道为什么截图的时候就没有选中的效果了。
本文介绍如何使用递归遍历TreeView控件中的所有结点,以便在这些结点中搜索特定信息。通过示例代码,展示了遍历和构建TreeView的实现过程。


被折叠的 条评论
为什么被折叠?



