Assembly : System.Windows.Forms (dans system.windows.forms.dll)
Syntaxe<ComVisibleAttribute(True)> _ <ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch)> _ Public Class TreeView Inherits Control
Dim instance As TreeView
[ComVisibleAttribute(true)] [ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch)] public class TreeView : Control
[ComVisibleAttribute(true)] [ClassInterfaceAttribute(ClassInterfaceType::AutoDispatch)] public ref class TreeView : public Control
/** @attribute ComVisibleAttribute(true) */ /** @attribute ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch) */ public class TreeView extends Control
ComVisibleAttribute(true) ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch) public class TreeView extends Control
NotesLa collection Nodes contient tous les objets TreeNode assignés à TreeView. Les n?uds d'arbre dans cette collection sont référencés comme n?uds d'arbre racines. Les n?uds d'arbre ajoutés par la suite à un n?ud d'arbre racine sont référencés comme n?uds enfants. Étant donné que chaque TreeNode peut contenir une collection d'autres objets TreeNode, il peut être difficile de déterminer votre position dans l'arborescence quand vous parcourez la collection. La chaîne TreeNode.FullPath peut être analysée en utilisant la valeur de chaîne PathSeparator pour déterminer le début et la fin d'une étiquette de TreeNode.
Pour afficher des images à côté des n?uds d'arbre, assignez un ImageList à la propriété ImageList et faites référence à la valeur d'index d'un Image dans le ImageList pour assigner Image. Utilisez les propriétés suivantes pour assigner des images :
-
Affectez à la propriété ImageIndex la valeur d'index du Image que vous souhaitez afficher lorsqu' un n?ud d'arbre est non sélectionné.
-
Affectez à la propriété SelectedImageIndex la valeur d'index de Image que vous souhaitez afficher lorsqu' un n?ud d'arbre est sélectionné.
Les images référencées par les valeurs des propriétés ImageIndex et SelectedImageIndex sont les images par défaut affichées pour tous les n?uds d'arbre assignés à la collection Nodes. Chaque n?ud d'arbre peut substituer les images par défaut en définissant les propriétés TreeNode.ImageIndex et TreeNode.SelectedImageIndex.
Les n?uds d'arbre peuvent être développés pour afficher le niveau suivant de n?uds d'arbre enfants. L'utilisateur peut développer TreeNode en cliquant sur le bouton (+) qui est affiché à côté de TreeNode, le cas échéant, ou bien vous pouvez développer TreeNode en appelant la méthode TreeNode.Expand. Pour développer tous les niveaux de n?uds d'arbre enfants dans la collection Nodes, appelez la méthode ExpandAll. Vous pouvez réduire le niveau des TreeNode enfants en appelant la méthode TreeNode.Collapse, ou bien cliquez sur le bouton (-) affiché à côté de TreeNode, le cas échéant. Vous pouvez également appeler la méthode TreeNode.Toggle pour basculer entre les états réduit et développé.
Les n?uds d'arbre peuvent éventuellement comporter des cases à cocher. Pour afficher les cases à cocher, affectez la valeur true à la propriété CheckBoxes de TreeView. La propriété Checked a la valeur true pour les n?uds d'arbre qui sont dans l'état activé.
Remarque |
|---|
| Le fait de définir la propriété TreeNode.Checked à partir de l'événement BeforeCheck ou AfterCheck entraîne le déclenchement de l'événement à plusieurs reprises et peut entraîner un comportement inattendu. Par exemple, vous pouvez définir la propriété Checked dans le gestionnaire d'événements lorsque vous procédez à une mise à jour récursive des n?uds enfants, de sorte que l'utilisateur n'a pas à développer et à vérifier chaque n?ud individuellement. Pour empêcher le déclenchement de l'événement à plusieurs reprises, ajoutez à votre gestionnaire d'événements une logique qui exécute le code récursif uniquement si la propriété Action de TreeViewEventArgs n'a pas la valeur TreeViewAction.Unknown. Pour obtenir un exemple, consultez la section Exemple des événements AfterCheck ou BeforeCheck. |
Vous pouvez modifier l'apparence du contrôle TreeView en définissant certaines de ses propriétés d'affichage et de style. L'affectation de la valeur true à ShowPlusMinus provoque l'affichage d'un bouton (+) ou (-) à côté de chaque TreeNode, qui permettent respectivement de développer ou réduire celui-ci. Si la propriété ShowRootLines prend la valeur true, TreeView affiche des lignes qui relient tous les n?uds d'arbre racines les uns aux autres. Vous pouvez afficher des lignes qui relient des n?uds d'arbre enfants à leur n?ud racine en affectant la valeur true à la propriété ShowLines. L'affectation de la valeur true à la propriété HotTracking modifie l'apparence des étiquettes de n?ud d'arbre lorsque le pointeur de la souris passe dessus. Lorsqu'il est « hot-tracked », les étiquettes de n?ud d'arbre prennent l'apparence d'un lien hypertexte. Vous pouvez également personnaliser l'apparence complète du contrôle TreeView. Pour cela, définissez la propriété DrawMode sur une valeur autre que TreeViewDrawMode.Normal et gérez l'événement DrawNode.
Remarque |
|---|
| Quand vous définissez les propriétés CheckBoxes, Scrollable, ImageIndex et SelectedImageIndex au moment de l'exécution, le handle TreeView est recréé (consultez Control.RecreateHandle) pour mettre à jour l'apparence du contrôle. Cela provoque la réduction de tous les n?uds d'arbre, à l'exception du TreeNode sélectionné. |
ExempleL'exemple de code suivant illustre l'utilisation du contrôle TreeView.
' Populates a TreeView control with example nodes. Private Sub InitializeTreeView() treeView1.BeginUpdate() treeView1.Nodes.Add("Parent") treeView1.Nodes(0).Nodes.Add("Child 1") treeView1.Nodes(0).Nodes.Add("Child 2") treeView1.Nodes(0).Nodes(1).Nodes.Add("Grandchild") treeView1.Nodes(0).Nodes(1).Nodes(0).Nodes.Add("Great Grandchild") treeView1.EndUpdate() End Sub
// Populates a TreeView control with example nodes. private void InitializeTreeView() { treeView1.BeginUpdate(); treeView1.Nodes.Add("Parent"); treeView1.Nodes[0].Nodes.Add("Child 1"); treeView1.Nodes[0].Nodes.Add("Child 2"); treeView1.Nodes[0].Nodes[1].Nodes.Add("Grandchild"); treeView1.Nodes[0].Nodes[1].Nodes[0].Nodes.Add("Great Grandchild"); treeView1.EndUpdate(); }
L'exemple de code suivant, plus complexe, affiche les informations client dans un contrôle TreeView. Les n?uds d'arbre racine affichent les noms des clients, tandis que les n?uds d'arbre enfants affichent les numéros de commande assignés à chaque client. Dans cet exemple, 1000 clients sont affichés avec 15 commandes chacun. Les méthodes BeginUpdate et EndUpdate permettent d'éviter que TreeView ne soit repeint et un Cursor d'attente est affiché pendant que TreeView crée et peint les objets TreeNode. Cet exemple suppose que vous disposez d'un objet Customer qui peut contenir une collection d'objets Order. Il requiert également que vous disposiez d'un fichier de curseur nommé MyWait.cur dans le répertoire de l'application et que vous ayez créé une instance d'un contrôle TreeView sur un Form.
' Create a new ArrayList to hold the Customer objects. Private customerArray As New ArrayList() Private Sub FillMyTreeView() ' Add customers to the ArrayList of Customer objects. Dim x As Integer For x = 0 To 999 customerArray.Add(New Customer("Customer" + x.ToString())) Next x ' Add orders to each Customer object in the ArrayList. Dim customer1 As Customer For Each customer1 In customerArray Dim y As Integer For y = 0 To 14 customer1.CustomerOrders.Add(New Order("Order" + y.ToString())) Next y Next customer1 ' Display a wait cursor while the TreeNodes are being created. Cursor.Current = New Cursor("MyWait.cur") ' Suppress repainting the TreeView until all the objects have been created. treeView1.BeginUpdate() ' Clear the TreeView each time the method is called. treeView1.Nodes.Clear() ' Add a root TreeNode for each Customer object in the ArrayList. Dim customer2 As Customer For Each customer2 In customerArray treeView1.Nodes.Add(New TreeNode(customer2.CustomerName)) ' Add a child TreeNode for each Order object in the current Customer object. Dim order1 As Order For Each order1 In customer2.CustomerOrders treeView1.Nodes(customerArray.IndexOf(customer2)).Nodes.Add( _ New TreeNode(customer2.CustomerName + "." + order1.OrderID)) Next order1 Next customer2 ' Reset the cursor to the default for all controls. Cursor.Current = System.Windows.Forms.Cursors.Default ' Begin repainting the TreeView. treeView1.EndUpdate() End Sub 'FillMyTreeView
// Create a new ArrayList to hold the Customer objects. private ArrayList customerArray = new ArrayList(); private void FillMyTreeView() { // Add customers to the ArrayList of Customer objects. for(int x=0; x<1000; x++) { customerArray.Add(new Customer("Customer" + x.ToString())); } // Add orders to each Customer object in the ArrayList. foreach(Customer customer1 in customerArray) { for(int y=0; y<15; y++) { customer1.CustomerOrders.Add(new Order("Order" + y.ToString())); } } // Display a wait cursor while the TreeNodes are being created. Cursor.Current = new Cursor("MyWait.cur"); // Suppress repainting the TreeView until all the objects have been created. treeView1.BeginUpdate(); // Clear the TreeView each time the method is called. treeView1.Nodes.Clear(); // Add a root TreeNode for each Customer object in the ArrayList. foreach(Customer customer2 in customerArray) { treeView1.Nodes.Add(new TreeNode(customer2.CustomerName)); // Add a child treenode for each Order object in the current Customer object. foreach(Order order1 in customer2.CustomerOrders) { treeView1.Nodes[customerArray.IndexOf(customer2)].Nodes.Add( new TreeNode(customer2.CustomerName + "." + order1.OrderID)); } } // Reset the cursor to the default for all controls. Cursor.Current = Cursors.Default; // Begin repainting the TreeView. treeView1.EndUpdate(); }
void FillMyTreeView() { // Add customers to the ArrayList of Customer objects. for ( int x = 0; x < 1000; x++ ) { customerArray->Add( gcnew Customer( "Customer " + x ) ); } // Add orders to each Customer object in the ArrayList. IEnumerator^ myEnum = customerArray->GetEnumerator(); while ( myEnum->MoveNext() ) { Customer^ customer1 = safe_cast<Customer^>(myEnum->Current); for ( int y = 0; y < 15; y++ ) { customer1->CustomerOrders->Add( gcnew Order( "Order " + y ) ); } } // Display a wait cursor while the TreeNodes are being created. ::Cursor::Current = gcnew System::Windows::Forms::Cursor( "MyWait.cur" ); // Suppress repainting the TreeView until all the objects have been created. treeView1->BeginUpdate(); // Clear the TreeView each time the method is called. treeView1->Nodes->Clear(); // Add a root TreeNode for each Customer object in the ArrayList. while ( myEnum->MoveNext() ) { Customer^ customer2 = safe_cast<Customer^>(myEnum->Current); treeView1->Nodes->Add( gcnew TreeNode( customer2->CustomerName ) ); // Add a child treenode for each Order object in the current Customer object. IEnumerator^ myEnum = customer2->CustomerOrders->GetEnumerator(); while ( myEnum->MoveNext() ) { Order^ order1 = safe_cast<Order^>(myEnum->Current); treeView1->Nodes[ customerArray->IndexOf( customer2 ) ]->Nodes->Add( gcnew TreeNode( customer2->CustomerName + "." + order1->OrderID ) ); } } // Reset the cursor to the default for all controls. ::Cursor::Current = Cursors::Default; // Begin repainting the TreeView. treeView1->EndUpdate(); }
// Create a new ArrayList to hold the Customer objects. private ArrayList customerArray = new ArrayList(); private void FillMyTreeView() { // Add customers to the ArrayList of Customer objects. for (int x = 0; x < 1000; x++) { customerArray.Add(new Customer("Customer" + ((Int32)x).ToString())); } // Add orders to each Customer object in the ArrayList. for (int iCtr = 0; iCtr < customerArray.get_Count(); iCtr++) { Customer customer1 = (Customer)customerArray.get_Item(iCtr); for (int y = 0; y < 15; y++) { customer1.get_CustomerOrders().Add(new Order("Order" + ((Int32)y).ToString())); } } // Display a wait cursor while the TreeNodes are being created. get_Cursor().set_Current(new Cursor("MyWait.cur")); // Suppress repainting the TreeView until all the objects have // been created. treeView1.BeginUpdate(); // Clear the TreeView each time the method is called. treeView1.get_Nodes().Clear(); // Add a root TreeNode for each Customer object in the ArrayList. for (int iCtr1 = 0; iCtr1 < customerArray.get_Count(); iCtr1++) { Customer customer2 = (Customer)customerArray.get_Item(iCtr1); treeView1.get_Nodes().Add(new TreeNode(customer2.get_CustomerName())); // Add a child treenode for each Order object in the current // Customer object. for (int iCtr2 = 0; iCtr2 < customer2.get_CustomerOrders(). get_Count(); iCtr2++) { Order order1 = (Order)customer2.get_CustomerOrders(). get_Item(iCtr2); treeView1.get_Nodes(). get_Item(customerArray.IndexOf(customer2)).get_Nodes(). Add(new TreeNode(customer2.get_CustomerName() + "." + order1.get_OrderID())); } } // Reset the cursor to the default for all controls. get_Cursor().set_Current(Cursors.get_Default()); // Begin repainting the TreeView. treeView1.EndUpdate(); } //FillMyTreeView
Sécurité des threads
Plates-formesWindows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition
Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.
Informations de version
Remarque
Outils (masquer)
S'enregistrer
Liste des Membres
Qui est en ligne?
FAQ