Il est parfois utile d'examiner chaque n?ud d'un contrôle TreeView Windows Forms pour effectuer des calculs sur les valeurs de n?ud. Cette opération peut être effectuée à l'aide d'une procédure récursive (méthode récursive en C# et C++) qui effectue une itération sur chaque n?ud dans chaque collection de l'arbre.
Chaque objet TreeNode est doté de propriétés que vous pouvez utiliser pour naviguer dans son arborescence ; ces propriétés sont : FirstNode, LastNode, NextNode, PrevNode et Parent. La valeur de la propriété Parent est le n?ud parent du n?ud actuel. Les n?uds enfants du n?ud actuel, le cas échéant, sont affichés dans sa propriété Nodes. Le contrôle TreeView lui-même est doté de la propriété TopNode qui correspond au n?ud racine de toute l'arborescence.
Pour effectuer une itération dans tous les n?uds du contrôle TreeView
-
Créez une procédure récursive (méthode récursive en C# et C++) testant chaque n?ud.
-
Appelez la procédure.
L'exemple suivant montre comment imprimer la propriété Text de chaque objet TreeNode :
Visual BasicPrivate 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
C#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); } }
J#private void PrintRecursive(TreeNode treeNode) { // Print the node. System.Diagnostics.Debug.WriteLine(treeNode.get_Text()); MessageBox.Show(treeNode.get_Text()); for(int i = 0; i < treeNode.GetNodeCount(false); ++i) // Print each node recursively. { PrintRecursive(treeNode.get_Nodes().get_Item(i)); } } // Call the procedure using the TreeView. private void CallRecursive(TreeView treeView) { // Print each node recursively. TreeNodeCollection nodes = treeView.get_Nodes(); for(int i = 0; i < nodes.get_Count(); ++i) { PrintRecursive(nodes.get_Item(i)); } }
C++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(); } }
Outils (masquer)
S'enregistrer
Liste des Membres
Qui est en ligne?
FAQ