4.9 KiB
title, ms.date, dev_langs, helpviewer_keywords, ms.assetid
| title | ms.date | dev_langs | helpviewer_keywords | ms.assetid | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Iterate Through All Nodes of TreeView Control | 03/30/2017 |
|
|
427f8928-ebcf-4beb-887f-695b905d5134 |
How to: Iterate Through All Nodes of a Windows Forms TreeView Control
It is sometimes useful to examine every node in a Windows Forms xref:System.Windows.Forms.TreeView control in order to perform some calculation on the node values. This operation can be done using a recursive procedure (recursive method in C# and C++) that iterates through each node in each collection of the tree.
Each xref:System.Windows.Forms.TreeNode object in a tree view has properties that you can use to navigate the tree view: xref:System.Windows.Forms.TreeNode.FirstNode%2A, xref:System.Windows.Forms.TreeNode.LastNode%2A, xref:System.Windows.Forms.TreeNode.NextNode%2A, xref:System.Windows.Forms.TreeNode.PrevNode%2A, and xref:System.Windows.Forms.TreeNode.Parent%2A. The value of the xref:System.Windows.Forms.TreeNode.Parent%2A property is the parent node of the current node. The child nodes of the current node, if there are any, are listed in its xref:System.Windows.Forms.TreeNode.Nodes%2A property. The xref:System.Windows.Forms.TreeView control itself has the xref:System.Windows.Forms.TreeView.TopNode%2A property, which is the root node of the entire tree view.
To iterate through all nodes of the TreeView control
-
Create a recursive procedure (recursive method in C# and C++) that tests each node.
-
Call the procedure.
The following example shows how to print each xref:System.Windows.Forms.TreeNode object's xref:System.Windows.Forms.TreeNode.Text%2A property:
Private Sub PrintRecursive(ByVal n As TreeNode) System.Diagnostics.Debug.WriteLine(n.Text) MessageBox.Show(n.Text) Dim aNode As TreeNode For Each aNode In n.Nodes PrintRecursive(aNode) Next End Sub ' Call the procedure using the top nodes of the treeview. Private Sub CallRecursive(ByVal aTreeView As TreeView) Dim n As TreeNode For Each n In aTreeView.Nodes PrintRecursive(n) Next End Subprivate void PrintRecursive(TreeNode treeNode) { // Print the node. System.Diagnostics.Debug.WriteLine(treeNode.Text); MessageBox.Show(treeNode.Text); // Print each node recursively. foreach (TreeNode tn in treeNode.Nodes) { PrintRecursive(tn); } } // Call the procedure using the TreeView. private void CallRecursive(TreeView treeView) { // Print each node recursively. TreeNodeCollection nodes = treeView.Nodes; foreach (TreeNode n in nodes) { PrintRecursive(n); } }private: void PrintRecursive( TreeNode^ treeNode ) { // Print the node. System::Diagnostics::Debug::WriteLine( treeNode->Text ); MessageBox::Show( treeNode->Text ); // Print each node recursively. System::Collections::IEnumerator^ myNodes = (safe_cast<System::Collections::IEnumerable^>(treeNode->Nodes))->GetEnumerator(); try { while ( myNodes->MoveNext() ) { TreeNode^ tn = safe_cast<TreeNode^>(myNodes->Current); PrintRecursive( tn ); } } finally { IDisposable^ disposable = dynamic_cast<System::IDisposable^>(myNodes); if ( disposable != nullptr ) disposable->Dispose(); } } // Call the procedure using the TreeView. void CallRecursive( TreeView^ treeView ) { // Print each node recursively. TreeNodeCollection^ nodes = treeView->Nodes; System::Collections::IEnumerator^ myNodes = (safe_cast<System::Collections::IEnumerable^>(nodes))->GetEnumerator(); try { while ( myNodes->MoveNext() ) { TreeNode^ n = safe_cast<TreeNode^>(myNodes->Current); PrintRecursive( n ); } } finally { IDisposable^ disposable = dynamic_cast<System::IDisposable^>(myNodes); if ( disposable != nullptr ) disposable->Dispose(); } }