Freigeben über


TreeNode-Klasse

Stellt einen Knoten einer TreeView dar.

Namespace: System.Windows.Forms
Assembly: System.Windows.Forms (in system.windows.forms.dll)

Syntax

'Declaration
<SerializableAttribute> _
Public Class TreeNode
    Inherits MarshalByRefObject
    Implements ICloneable, ISerializable
'Usage
Dim instance As TreeNode
[SerializableAttribute] 
public class TreeNode : MarshalByRefObject, ICloneable, ISerializable
[SerializableAttribute] 
public ref class TreeNode : public MarshalByRefObject, ICloneable, ISerializable
/** @attribute SerializableAttribute() */ 
public class TreeNode extends MarshalByRefObject implements ICloneable, ISerializable
SerializableAttribute 
public class TreeNode extends MarshalByRefObject implements ICloneable, ISerializable

Hinweise

Die Nodes-Auflistung enthält alle untergeordneten TreeNode-Objekte, die dem aktuellen TreeNode zugewiesen sind. Sie können einen TreeNode hinzufügen, entfernen oder klonen. Dabei werden auch alle untergeordneten Strukturknoten hinzugefügt, entfernt oder geklont. Jeder TreeNode kann eine Auflistung anderer TreeNode-Objekte enthalten. Dies kann die Bestimmung der Position in der TreeView beim Durchlaufen der Auflistung erschweren. Die jeweilige Position in einer Struktur kann mithilfe der FullPath-Eigenschaft bestimmt werden. Die FullPath-Zeichenfolge kann mit dem PathSeparator-Zeichenfolgenwert analysiert werden, um den Anfang und das Ende einer TreeNode-Bezeichnung zu bestimmen.

Die TreeNode-Bezeichnung wird durch explizites Festlegen der Text-Eigenschaft festgelegt. Alternativ dazu kann der Strukturknoten auch mithilfe des TreeNode-Konstruktors mit einem Zeichenfolgenparameter, der die Text-Eigenschaft darstellt, erstellt werden. Die Bezeichnung wird neben dem TreeNode-Bild angezeigt, sofern ein Bild angezeigt wird.

Zum Anzeigen von Bildern neben den Strukturknoten weisen Sie der ImageList-Eigenschaft des übergeordneten TreeView-Steuerelements eine ImageList zu. Außerdem weisen Sie ein Image zu, indem Sie in der ImageList-Eigenschaft einen Verweis auf den zugehörigen Indexwert erstellen. Legen Sie die ImageIndex-Eigenschaft auf den Indexwert des Image fest, das angezeigt werden soll, wenn der TreeNode nicht ausgewählt ist. Legen Sie die SelectedImageIndex-Eigenschaft dementsprechend auf den Indexwert des Image fest, das angezeigt werden soll, wenn der TreeNode ausgewählt ist.

Mithilfe der folgenden Eigenschaftenwerte können bestimmte Strukturknoten ausgewählt sowie die Nodes-Auflistung durchlaufen werden: FirstNode, LastNode, NextNode, PrevNode, NextVisibleNode, PrevVisibleNode. Weisen Sie der TreeView.SelectedNode-Eigenschaft den von einer der oben genannten Eigenschaften zurückgegebenen TreeNode zu, um diesen Strukturknoten im TreeView-Steuerelement auszuwählen.

Strukturknoten können erweitert werden, um die nächste Ebene von untergeordneten Strukturknoten anzuzeigen. Der Benutzer kann den TreeNode erweitern, indem er auf die Schaltfläche mit dem Pluszeichen (+) klickt, sofern diese neben dem TreeNode angezeigt wird. Der TreeNode kann auch durch Aufrufen der Expand-Methode erweitert werden. Wenn Sie alle Ebenen von untergeordneten Strukturknoten in der Nodes-Auflistung erweitern möchten, rufen Sie die ExpandAll-Methode auf. Sie können die untergeordnete TreeNode-Ebene reduzieren, indem Sie die Collapse-Methode aufrufen. Der Benutzer kann aber auch auf die Schaltfläche mit dem Minuszeichen (-) klicken, sofern diese neben dem TreeNode angezeigt wird. Darüber hinaus kann die Toggle-Methode aufgerufen werden, um zwischen dem erweiterten und dem reduzierten Zustand des TreeNode zu wechseln.

Strukturknoten können optional ein Kontrollkästchen anzeigen. Um die Kontrollkästchen anzeigen zu lassen, legen Sie die CheckBoxes-Eigenschaft der TreeView auf true fest. Die Checked-Eigenschaft wird für Strukturknoten im aktivierten Zustand auf true festgelegt.

Hinweise für Erben Da die TreeNode-Klasse die ISerializable-Schnittstelle implementiert, müssen abgeleitete Klassen, die serialisierbar sein sollen, ebenfalls diese Schnittstelle und spezielle Konstruktoren implementieren (siehe unter Benutzerdefinierte Serialisierung).

Beispiel

Im folgenden Codebeispiel werden Kundeninformationen in einem TreeView-Steuerelement angezeigt. Die Stammknoten zeigen die Namen der Kunden, die untergeordneten Knoten zeigen die dem jeweiligen Kunden zugewiesenen Auftragsnummern an. In diesem Beispiel werden 1.000 Kunden mit jeweils 15 Aufträgen angezeigt. Das Neuaufbauen der TreeView wird mithilfe der BeginUpdate-Methode und der EndUpdate-Methode unterdrückt, und es wird ein Warte-Cursor angezeigt, solange die TreeNode-Objekte im TreeView erstellt und gezeichnet werden. Für dieses Beispiel muss ein Customer-Objekt vorhanden sein, das eine Auflistung von Order-Objekten enthalten kann. Des Weiteren muss in einem Form eine Instanz eines TreeView-Steuerelements erstellt worden sein.

' 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

Vererbungshierarchie

System.Object
   System.MarshalByRefObject
    System.Windows.Forms.TreeNode
       System.ComponentModel.Design.ObjectSelectorEditor.SelectorNode

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

TreeNode-Member
System.Windows.Forms-Namespace
TreeView
TreeNodeCollection

Weitere Ressourcen

Gewusst wie: Hinzufügen oder Entfernen von Knoten mit dem TreeView-Steuerelement in Windows Forms