--- title: Iterate Through All Nodes of TreeView Control ms.date: "03/30/2017" dev_langs: - "csharp" - "vb" - "cpp" helpviewer_keywords: - "examples [Windows Forms], TreeView control" - "TreeView control [Windows Forms], iterating through nodes" - "tree nodes in TreeView control [Windows Forms], iterating through" ms.assetid: 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 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 object in a tree view has properties that you can use to navigate the tree view: , , , , and . The value of the property is the parent node of the current node. The child nodes of the current node, if there are any, are listed in its property. The control itself has the property, which is the root node of the entire tree view. ### To iterate through all nodes of the TreeView control 1. Create a recursive procedure (recursive method in C# and C++) that tests each node. 2. Call the procedure. The following example shows how to print each object's property: ```vb 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 Sub ``` ```csharp private 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); } } ``` ```cpp 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(treeNode->Nodes))->GetEnumerator(); try { while ( myNodes->MoveNext() ) { TreeNode^ tn = safe_cast(myNodes->Current); PrintRecursive( tn ); } } finally { IDisposable^ disposable = dynamic_cast(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(nodes))->GetEnumerator(); try { while ( myNodes->MoveNext() ) { TreeNode^ n = safe_cast(myNodes->Current); PrintRecursive( n ); } } finally { IDisposable^ disposable = dynamic_cast(myNodes); if ( disposable != nullptr ) disposable->Dispose(); } } ``` ## See also - [TreeView Control](treeview-control-windows-forms.md) - [Recursive Procedures](https://docs.microsoft.com/dotnet/visual-basic/programming-guide/language-features/procedures/recursive-procedures)