Free Trial

Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.


  • Create BookmarkCreate Bookmark
  • Create Note or TagCreate Note or Tag
  • PrintPrint
Share this Page URL
Help

Mehrgliedrige Steuerelemente > Das TreeView-Steuerelement

Das TreeView-Steuerelement

Mithilfe des TreeView-Steuerelements können Daten hierarchisch organisiert abgebildet werden. Das Steuerelement unterstützt die Mehrfachauswahl mithilfe von zuschaltbaren Kontrollkästchen pro dargestelltem Knoten.

Das Objektmodell eines TreeView-Steuerelements besteht aus einer rekursiven Zusammenstellung von Auflistungen und Knoten der Klasse TreeNode. Jeder Knoten besitzt genau einen übergeordneten Knoten. Aufgrund dessen, dass im TreeView-Steuerelement selbst eine Auflistung der Klasse TreeNodeCollection untergebracht ist, kann das Steuerelement in oberster Ebene beliebig viele Knoten enthalten.

Tabelle 4.20 Wichtige Elemente der Klasse TreeView

Member

Name

Beschreibung

CheckBoxes

Liefert oder definiert true, wenn das TreeView-Steuerelement zu jedem enthaltenen Knoten ein Kontrollkästchen anzeigt

FullRowSelect

Liefert oder definiert true, wenn die Auswahl des Knotens über die gesamte Breite des Steuerelements angezeigt wird. Diese Einstellung wird jedoch ignoriert, wenn die Eigenschaft ShowLines true ist.

HideSelection

Liefert oder definiert true, wenn die aktuelle Auswahl des TreeView-Steuerelements nicht angezeigt werden soll, sofern der Baum den Fokus nicht besitzt

HotTracking

Liefert oder definiert true, wenn der Text des Knotens beim Überstreichen mit der Maus wie ein Hyperlink dargestellt wird

ImageIndex, ImageKey

Liefert oder definiert den Index, respektive den Schlüssel des anzuzeigenden Bilds im nicht ausgewählten Zustand (nur eine der beiden Angaben ist notwendig). Die Angabe bezieht sich auf die Bildliste, die mit der Eigenschaft ImageList definiert ist.

SelectedImageIndex, SelectedImageKey

Liefert oder definiert den Index, respektive den Schlüssel des anzuzeigenden Bilds im ausgewählten Zustand (nur eine der beiden Angaben ist notwendig). Die Angabe bezieht sich auf die Bildliste, die mit der Eigenschaft StateImageList definiert ist.

ImageList, StateImageList

Liefert oder definiert die Bildliste für nicht ausgewählten, respektive ausgewählten Zustand der Knoten

Indent

Liefert oder definiert die Einrückung für jede Stufe im Baum. Werte kleiner 16 werden ignoriert.

ItemHeight

Liefert oder definiert die Höhe der Knoten

LabelEdit

Liefert oder definiert true, wenn der Text des Knotens direkt im Baum editiert werden kann

LineColor

Liefert oder definiert die Farbe der Linien, die die Knoten verbinden

Nodes

Liefert die Liste der Knoten im Wurzelverzeichnis

PathSeparator

Liefert oder definiert das Trennzeichen, das für den Zugriff auf einen bestimmten Knoten benutzt werden kann

SelectedNode

Liefert oder definiert den Knoten, der aktuell selektiert ist. Ist kein Knoten selektiert, liefert diese Eigenschaft null. Wird diese Eigenschaft auf einen bestimmten Knoten gesetzt, wird dieser in das Fenster verschoben und der Pfad wird, wenn nötig, erweitert, sodass der Knoten sichtbar wird.

ShowLines, ShowPlusMinus, ShowRootLines

Liefert oder definiert true, wenn das dem Namen entsprechende Element des Steuerelements angezeigt wird

ShowNodeToolTip

Liefert oder definiert true, wenn die Tooltipps der Knoten beim Überstreichen mit der Maus angezeigt werden sollen

Sorted

Liefert oder definiert true, wenn die Einträge im Baum sortiert sind

TopNode

Liefert den ersten voll sichtbaren Knoten des Baums

TreeViewNodeSorter

Liefert oder definiert eine Instanz, die die Schnittstelle IComparer implementiert, um eine spezialisierte Sortierung durchzuführen

VisibleCount

Liefert die Anzahl der Knoten, die im Baum ganz dargestellt werden können

CollapseAll(), ExpandAll()

Klappt alle Knoten ein, sodass die kompakteste Darstellung des Baums gezeigt wird, respektive erweitert den Baum, sodass alle Knoten sichtbar sind

GetNodeAt()

Liefert den Knoten, der an einer definierten grafischen Position ist

GetNodeCount()

Liefert die Anzahl der Knoten optional inklusive aller Subknoten

HitTest()

Liefert die Informationen über einen Knoten an einer bestimmten grafischen Position

Sort()

Sortiert die Knoten. Um diese Methode zu nutzen, muss die Eigenschaft TreeViewNodeSorter definiert sein

AfterCheck, BeforeCheck

Wird ausgelöst, nachdem respektive bevor das Kontrollkästchen eines bestimmten Knotens verändert wurde

AfterCollapse, BeforeCollapse

Wird ausgelöst, nachdem respektive bevor die Knoten eingeklappt wurden

AfterExpand, BeforeExpand

Wird ausgelöst, nachdem respektive bevor die Knoten erweitert worden sind

AfterLabelEdit, BeforeLabelEdit

Wird ausgelöst, nachdem respektive bevor der Text eines Knotens verändert wurde

AfterSelect, BeforeSelect

Wird ausgelöst, nachdem respektive bevor ein bestimmter Knoten selektiert wurde

NodeMouseClick, ...DoubleClick, ...Hover

Werden bei entsprechender Mausaktion ausgelöst

Das Beispiel Abbildung 4.20 zeigt die Darstellung eines TreeView-Steuerelements in der Anwendung für einen eingelesenen Baum des Dateisystems. Das dazu gehörende Listing 4.5 zeigt den Beginn des Ladevorgangs, indem die Laufwerke als erste Knoten in das Steuerelement geladen werden.

Hinweis

Beachten Sie beim Umgang mit einem TreeView-Steuerelement, dass die Knoten nur dann die Zeichen für eine Erweiterung anzeigen, wenn auch tatsächlich ein Inhalt vorhanden ist. Da im Umgang mit dem Dateisystem aus Geschwindigkeitsgründen nicht der gesamte Baum eingelesen werden sollte, muss also für eine mögliche Erweiterung eines Baumes immer eine Stufe mehr eingelesen werden, als gerade angezeigt wird. Zu diesem Zweck implementieren Sie das Ereignis BeforeExpand, wie es im Listing des Beispiels abgebildet ist.

Abbildung von hierarchischen Daten

Abbildung 4.20 Abbildung von hierarchischen Daten

// Ereignisbehandlung für das Laden des Formulars
private void CpnlTreeView_Load(object sender, EventArgs e) {
    // Lokale Daten
    TreeNode objNode;

    // Alle Laufwerke auflisten und als sichtbare Objekte darstellen
    foreach (DriveInfo objDrive in DriveInfo.GetDrives()){
        objNode = new TreeNode();
        objNode.Text = objDrive.Name;
        // Abbildung ergänzen
        switch (objDrive.DriveType) {
            case DriveType.CDRom:
                objNode.ImageIndex = objNode.SelectedImageIndex = 2;
                break;
            case DriveType.Fixed:
                objNode.ImageIndex = objNode.SelectedImageIndex = 3;
                break;
(Wiedergabe gekürzt)
        }

        // Knoten in Baum einfügen und prüfen, ob das Laufwerk gelesen werden kann
        _tvMain.Nodes.Add(objNode);
        if (objDrive.IsReady) {
            // Laufwerk kann gelesen werden. Erste Ebene der Daten einlesen
            AddDirectory(objNode.Nodes, objDrive.RootDirectory.FullName);
        }
    }
}
// Ereignisbehandlung für das Erweitern eines Knotens
private void TreeViewMain_BeforeExpand(object sender, TreeViewCancelEventArgs e) {
    // Für jeden bereits enthaltenen Knoten die nächste Ebene lesen.
    // Diese Maßnahme ist notwendig, damit das TreeView-Steuerelement
    // für die Knoten die richtige Darstellung wählt (erweiterbar oder nicht).
    foreach (TreeNode objNode in e.Node.Nodes) {
        AddDirectory(objNode.Nodes, objNode.Tag.ToString());
    }
}

Listing 4.5 Band_2\Kapitel_04\LearningForms_04\LearningForms_04\20_PolynominalControls\CpnlTreeView.cs