首先先看一段MSDN上的示例程序:打印一个树中所有节点名称
MSDN上遍历树节点的示例程序
1private void PrintRecursive(TreeNode treeNode)
2{
3 // Print the node.
4 System.Diagnostics.Debug.WriteLine(treeNode.Text);
5 MessageBox.Show(treeNode.Text);
6 // Print each node recursively.
7 foreach (TreeNode tn in treeNode.Nodes)
8 {
9 PrintRecursive(tn);
10 }
11}
12
13// Call the procedure using the TreeView.
14private void CallRecursive(TreeView treeView)
15{
16 // Print each node recursively.
17 TreeNodeCollection nodes = treeView.Nodes;
18 foreach (TreeNode n in nodes)
19 {
20 PrintRecursive(n);
21 }
22}
1private void PrintRecursive(TreeNode treeNode)
2{
3 // Print the node.
4 System.Diagnostics.Debug.WriteLine(treeNode.Text);
5 MessageBox.Show(treeNode.Text);
6 // Print each node recursively.
7 foreach (TreeNode tn in treeNode.Nodes)
8 {
9 PrintRecursive(tn);
10 }
11}
12
13// Call the procedure using the TreeView.
14private void CallRecursive(TreeView treeView)
15{
16 // Print each node recursively.
17 TreeNodeCollection nodes = treeView.Nodes;
18 foreach (TreeNode n in nodes)
19 {
20 PrintRecursive(n);
21 }
22}
然后要说明的是一下TreeView类和TreeNode类之间的关系:TreeView类中有个只读属性是Nodes,它是属于TreeNodeCollection类型的,而对于一个TreeView它的Nodes属性就是返回treeView根结点的集合。
然后就是我的递归遍历查找一个树节点的方法(由于程序需要我是根据树节点的ImageIndex属性查找的):
Code
private TreeNode FindTreeNode(int imageIndex, TreeNode tnParent)
{
if (tnParent == null)
return null;
if (tnParent.ImageIndex == imageIndex)
return tnParent;
TreeNode tnRet = null;
foreach (TreeNode tn in tnParent.Nodes)
{
tnRet = FindTreeNode(imageIndex, tn);
if (tnRet != null)
break;
}
return tnRet;
}
private TreeNode CallFindNode(int imageIndex, TreeView treeView)
{
TreeNodeCollection nodes = treeView.Nodes;
foreach (TreeNode n in nodes)
{
TreeNode temp = FindTreeNode(imageIndex, n);
if (temp != null)
return temp;
}
return null;
}
/// <summary>
/// 这个是一个点击事件,其中改变了选中节点,
/// 改变选中节点的同时就触发了selectedNodeChanged事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void myControlTransactions_AddCustomer(object sender, EventArgs e)
{
TreeNode temp = CallFindNode(3, treeView1);
if (temp != null)
treeView1.SelectedNode = temp;
}
private TreeNode FindTreeNode(int imageIndex, TreeNode tnParent)
{
if (tnParent == null)
return null;
if (tnParent.ImageIndex == imageIndex)
return tnParent;
TreeNode tnRet = null;
foreach (TreeNode tn in tnParent.Nodes)
{
tnRet = FindTreeNode(imageIndex, tn);
if (tnRet != null)
break;
}
return tnRet;
}
private TreeNode CallFindNode(int imageIndex, TreeView treeView)
{
TreeNodeCollection nodes = treeView.Nodes;
foreach (TreeNode n in nodes)
{
TreeNode temp = FindTreeNode(imageIndex, n);
if (temp != null)
return temp;
}
return null;
}
/// <summary>
/// 这个是一个点击事件,其中改变了选中节点,
/// 改变选中节点的同时就触发了selectedNodeChanged事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void myControlTransactions_AddCustomer(object sender, EventArgs e)
{
TreeNode temp = CallFindNode(3, treeView1);
if (temp != null)
treeView1.SelectedNode = temp;
}