(0) exportieren Drucken
Alle erweitern

TreeView-Klasse

Zeigt eine hierarchische Auflistung bezeichneter Elemente an, von denen jedes durch einen TreeNode dargestellt wird.

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

[ComVisibleAttribute(true)] 
[ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch)] 
public class TreeView : Control
/** @attribute ComVisibleAttribute(true) */ 
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch) */ 
public class TreeView extends Control
ComVisibleAttribute(true) 
ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch) 
public class TreeView extends Control

Die Nodes-Auflistung enthält alle TreeNode-Objekte, die dem TreeView-Steuerelement zugewiesen sind. Die Strukturknoten in dieser Auflistung werden als Stammknoten bezeichnet. Ein anschließend einem Stammknoten hinzugefügter Strukturknoten wird als untergeordneter Knoten bezeichnet. Da jeder TreeNode eine Auflistung anderer TreeNode-Objekte enthalten kann, ist es beim Durchlaufen der Struktur u. U. schwierig, Ihre Position in der Struktur zu bestimmen. Sie können die TreeNode.FullPath-Zeichenfolge analysieren, indem Sie mithilfe des PathSeparator-Zeichenfolgenwerts den Anfang und das Ende einer TreeNode-Bezeichnung bestimmen.

Sie können neben den Strukturknoten Bilder anzeigen lassen, indem Sie der ImageList-Eigenschaft eine ImageList zuweisen und für die Zuweisung dieses Image auf den Indexwert von Image in ImageList verweisen. Verwenden Sie die folgenden Eigenschaften, um Bilder zuzuweisen:

  • Legen Sie die ImageIndex-Eigenschaft auf den Indexwert des Image fest, das angezeigt werden soll, wenn ein Strukturknoten nicht ausgewählt ist.

  • Legen Sie die SelectedImageIndex-Eigenschaft auf den Indexwert des Image fest, das angezeigt werden soll, wenn ein Strukturknoten ausgewählt ist.

Die Bilder, auf die die Werte der ImageIndex-Eigenschaft und der SelectedImageIndex-Eigenschaft verweisen, sind die Standardbilder, die für alle der Nodes-Auflistung zugewiesenen Strukturknoten angezeigt werden. Einzelne Strukturknoten können die Standardbilder überschreiben, indem die TreeNode.ImageIndex-Eigenschaft und die TreeNode.SelectedImageIndex-Eigenschaft festgelegt werden.

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 TreeNode.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 TreeNode.Collapse-Methode aufrufen. Sie können aber auch auf die Schaltfläche mit dem Minuszeichen (-) klicken, sofern diese neben dem TreeNode angezeigt wird. Zudem kann die TreeNode.Toggle-Methode aufgerufen werden, um zwischen dem erweiterten und dem reduzierten Zustand zu wechseln.

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

HinweisHinweis

Durch Festlegen der TreeNode.Checked-Eigenschaft im BeforeCheck-Ereignis oder im AfterCheck-Ereignis wird das Ereignis mehrmals ausgelöst. Dies kann zu unerwartetem Verhalten führen. Beispielsweise können Sie die Checked-Eigenschaft im Ereignishandler beim rekursiven Aktualisieren der untergeordneten Knoten festlegen, sodass der Benutzer die Knoten nicht einzeln erweitern und aktivieren muss. Wenn verhindert werden soll, dass das Ereignis mehrmals ausgelöst wird, fügen Sie dem Ereignishandler Logik hinzu, die den rekursiven Code nur dann ausführt, wenn die Action-Eigenschaft der Instanz von TreeViewEventArgs nicht auf TreeViewAction.Unknown festgelegt ist. Ein entsprechendes Beispiel zur Vorgehensweise finden Sie im Beispielabschnitt des AfterCheck-Ereignisses und des BeforeCheck-Ereignisses.

Sie können die Darstellung des TreeView-Steuerelements ändern, indem Sie einige zugehörige Anzeige- und Stileigenschaften festlegen. Wenn Sie ShowPlusMinus auf true festlegen, wird neben jeder erweiterbaren bzw. reduzierbaren TreeNode eine Schaltfläche mit einem Plus- bzw. Minuszeichen angezeigt. Wenn Sie die ShowRootLines-Eigenschaft auf true festlegen, werden in der TreeView Verbindungslinien zwischen allen Stammknoten angezeigt. Sie können Verbindungslinien zwischen untergeordneten Knoten und dem zugehörigen Stammknoten anzeigen, indem Sie die ShowLines-Eigenschaft auf true festlegen. Wenn Sie die HotTracking-Eigenschaft auf true festlegen, ändert sich die Darstellung der Strukturknotenbezeichnung, wenn der Mauszeiger darüber bewegt wird. Beim Hot-Tracking werden die Strukturknotenbezeichnungen als Hyperlinks dargestellt. Sie können auch die Darstellung des TreeView-Steuerelements vollständig anpassen. Dazu legen Sie die DrawMode-Eigenschaft auf einen anderen Wert als TreeViewDrawMode.Normal fest und bearbeiten das DrawNode-Ereignis.

HinweisHinweis

Wenn die Eigenschaften CheckBoxes, Scrollable, ImageIndex und SelectedImageIndex zur Laufzeit festgelegt werden, wird das TreeView-Handle neu erstellt (siehe Control.RecreateHandle), um die Darstellung des Steuerelements zu aktualisieren. Dadurch werden alle Strukturknoten mit Ausnahme des ausgewählten TreeNode reduziert.

Im folgenden Codebeispiel wird die Verwendung des TreeView-Steuerelement veranschaulicht.

// 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();
}

Im folgenden komplexeren Codebeispiel werden Kundeninformationen in einem TreeView-Steuerelement angezeigt. Die Stammknoten zeigen die Namen der Kunden an, 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 in der TreeView erstellt und gezeichnet werden. Für dieses Beispiel muss ein Customer-Objekt vorhanden sein, das eine Auflistung von Order-Objekten enthalten kann. Darüber hinaus ist es erforderlich, dass im Anwendungsverzeichnis die Cursordatei MyWait.cur vorhanden ist und eine Instanz eines TreeView-Steuerelements im Form erstellt wurde.

// 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();
}

// 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

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

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.

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0
Anzeigen:
© 2014 Microsoft