Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Über den Autor
Vorwort zur 4. Auflage
1 Allgemeine Einführung in .NET
2 Grundlagen der Sprache C#
3 Klassendesign und Vererbung
4 Weitere .NET-Datentypen
5 Weitere Möglichkeiten von C#
6 Projektmanagement und Visual Studio 2008
7 Fehlerbehandlung und Debugging
8 LINQ
9 Multithreading und asynchrone Methodenaufrufe
10 Arbeiten mit Dateien und Streams
11 Serialisierung
12 Einige wichtige .NET-Klassen
13 Grundlagen zum Erstellen einer Windows-Anwendung
14 Die wichtigsten Steuerelemente
15 Tastatur- und Mausereignisse
16 MDI-Anwendungen
17 Grafische Programmierung mit GDI+
18 Das Drucken (Printing)
19 Steuerelemente entwickeln
20 Programmiertechniken
21 WPF – die Grundlagen
22 Die Layoutcontainer
23 Die WPF-Controls
24 Konzepte von WPF
25 ADO.NET – die Verbindung zu einer Datenbank herstellen
26 Die Datenbankabfrage
27 Der SqlDataAdapter
28 Daten im lokalen Speicher – das DataSet
29 Eine Datenbank aktualisieren
30 Stark typisierte DataSets
31 Weitergabe von Anwendungen
Stichwort

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Visual C# 2008 von Andreas Kuehnel
Das umfassende Handbuch
Buch: Visual C# 2008

Visual C# 2008
geb., mit DVD
1.366 S., 49,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1172-7
Pfeil 14 Die wichtigsten Steuerelemente
Pfeil 14.1 Gemeinsame Eigenschaften, Methoden und Ereignisse
Pfeil 14.1.1 Größe und Position
Pfeil 14.1.2 Die Sichtbarkeit und der Aktivierungszustand
Pfeil 14.1.3 Die Eigenschaft »Text«
Pfeil 14.1.4 Die Farbeigenschaften
Pfeil 14.1.5 Grafische Darstellung
Pfeil 14.1.6 Die »Modifiers«-Eigenschaft
Pfeil 14.1.7 Die Eigenschaft »Tag«
Pfeil 14.1.8 Die Größe von Steuerelementen dynamisch der Formgröße anpassen
Pfeil 14.1.9 Die »Dock«-Eigenschaft
Pfeil 14.1.10 Steuerelemente fokussieren
Pfeil 14.1.11 Maus- und Tastaturereignisse
Pfeil 14.2 Schaltflächen der Klasse »Button«
Pfeil 14.2.1 Die Rahmendarstellung einer Schaltfläche
Pfeil 14.2.2 Die Eigenschaft »FlatAppearance«
Pfeil 14.2.3 Beschriftung und Grafiken
Pfeil 14.3 Auswahlkästchen mit der Klasse »CheckBox«
Pfeil 14.3.1 Eigenschaften eines Kontrollkästchens
Pfeil 14.3.2 Checkboxen mit drei Aktivierungszuständen
Pfeil 14.4 Die Klasse »RadioButton« (Optionsschaltflächen)
Pfeil 14.4.1 Die Gruppierung der Optionsschaltflächen
Pfeil 14.4.2 Die Eigenschaften von Optionsschaltflächen
Pfeil 14.4.3 Den Zustandswechsel programmieren
Pfeil 14.5 Die »GroupBox« als übergeordneter Container
Pfeil 14.6 Texteingabefelder mit der Klasse »TextBox«
Pfeil 14.6.1 Einzeilige Eingabefelder
Pfeil 14.6.2 Mehrzeilige Eingabefelder
Pfeil 14.7 Beschriftungen mit dem Steuerelement »Label«
Pfeil 14.8 Die Anzeige eines Quickinfo-Texts
Pfeil 14.8.1 Methoden des »ToolTip«-Steuerelements
Pfeil 14.8.2 Aktivierungsdauer des »QuickInfo«-Steuerelements
Pfeil 14.8.3 Weitere Eigenschaften
Pfeil 14.9 Das »ListBox«-Steuerelement
Pfeil 14.9.1 Die Auflistung »ListBox.ObjectCollection«
Pfeil 14.9.2 Eigenschaften zur Darstellung einer Listbox
Pfeil 14.9.3 Einfach- und Mehrfachauswahl der Listenelemente
Pfeil 14.9.4 Programmgesteuerter Zugriff auf Listboxen mit Einfachauswahl
Pfeil 14.9.5 Benutzerdefiniertes Sortieren der Listenelemente
Pfeil 14.9.6 Füllen einer Listbox mit »DataSource«
Pfeil 14.10 Das Steuerelement »CheckedListBox«
Pfeil 14.11 Die »ComboBox« (Kombinationslistenfeld)
Pfeil 14.11.1 Ereignisse eines Kombinationslistenfeldes
Pfeil 14.11.2 Autovervollständigung in einer »ComboBox«
Pfeil 14.12 Standarddialoge
Pfeil 14.12.1 Die Klasse »OpenFileDialog«
Pfeil 14.12.2 Die Klasse »SaveFileDialog«
Pfeil 14.12.3 Der Dialog »FolderBrowserDialog«
Pfeil 14.12.4 Die Klasse »ColorDialog«
Pfeil 14.12.5 Die Klasse »FontDialog«
Pfeil 14.13 Menü-, Symbol- und Statusleiste sowie Kontextmenüs
Pfeil 14.13.1 Das Steuerelement »ToolStripContainer«
Pfeil 14.13.2 Bereitstellen eines Menüs
Pfeil 14.13.3 Kontextmenüs
Pfeil 14.13.4 Die Symbolleiste
Pfeil 14.13.5 Die Statusleiste
Pfeil 14.13.6 Eine Statusleiste bereitstellen
Pfeil 14.14 Bildlaufleisten mit »HScrollBar« und »VScrollBar«
Pfeil 14.15 Das »ProgressBar«-Steuerelement
Pfeil 14.16 Das »Timer«-Steuerelement
Pfeil 14.17 Das »Panel«-Steuerelement
Pfeil 14.18 Registerkarten mit »TabControl«
Pfeil 14.18.1 Die Klasse »TabControl«
Pfeil 14.19 Das »TreeView«-Steuerelement
Pfeil 14.19.1 Knotenpunkte im »TreeView« definieren
Pfeil 14.19.2 Eigenschaften des »TreeView«-Steuerelements
Pfeil 14.19.3 Die Ereignisse des »TreeView«-Steuerelements
Pfeil 14.19.4 Weitere Eigenschaften und Methoden des »TreeView«-Objekts
Pfeil 14.19.5 Eigenschaften und Methoden des »TreeNode«-Objekts
Pfeil 14.20 Die beiden »Splitter«-Steuerelemente
Pfeil 14.20.1 Das Steuerelement »Splitter«
Pfeil 14.20.2 Das Steuerelement »SplitContainer«
Pfeil 14.21 Das »ListView«-Steuerelement
Pfeil 14.21.1 Die Klassen des »ListView«-Steuerelements
Pfeil 14.21.2 Die Eigenschaften der »ListView«
Pfeil 14.21.3 Listenelemente vom Typ »ListViewItem«
Pfeil 14.21.4 Das Element »ListViewSubItem«
Pfeil 14.21.5 Der Typ »ColumnHeader«
Pfeil 14.21.6 Listenelemente Gruppen zuordnen
Pfeil 14.21.7 Sortierung der Spalten
Pfeil 14.21.8 Listenelemente ändern
Pfeil 14.21.9 Beispielanwendung


Galileo Computing - Zum Seitenanfang

14.19 Das »TreeView«-Steuerelement Zur nächsten ÜberschriftZur vorigen Überschrift

Wenn Sie den Microsoft Explorer öffnen, werden Sie in dessen Clientbereich drei Steuerelemente wiederfinden, mit denen wir uns in diesem und den folgenden Abschnitten beschäftigen wollen. Im linken Teil des Fensters werden in einer hierarchischen Struktur alle verfügbaren Laufwerke aufgeführt, die sich bei einem Klick auf das »+«-Zeichen öffnen und die darin enthaltene Ordnerstruktur preisgeben. Dieses Verhalten wird durch ein TreeView-Steuerelement bereitgestellt, das auch als Strukturansicht bezeichnet wird. Von einem Ordner werden Dateien verwaltet, die wahlweise in verschiedenen Ansichten im rechten Teil des Explorers ausgegeben werden. .NET bietet uns zu diesem Zweck das Steuerelement ListView an.

Die beiden durch ein TreeView- und ein ListView-Objekt gebildeten Teilfenster haben keine statische Breite, sondern können vom Anwender je nach Bedarf unter Beibehaltung der Breite des Fensters mit der Maus vergrößert oder verkleinert werden. Für diese Änderung ist das Steuerelement Splitter zuständig.


Galileo Computing - Zum Seitenanfang

14.19.1 Knotenpunkte im »TreeView« definieren Zur nächsten ÜberschriftZur vorigen Überschrift

Zunächst widmen wir uns dem TreeView-Control, das sich nicht nur zur Anzeige der Laufwerke und deren untergeordneten Verzeichnissen eignet, sondern auch zur Darstellung beliebiger hierarchischer Strukturen wie beispielsweise denen einer Datenbank.

Betrachten Sie zunächst die folgende Abbildung, in der in einem TreeView-Steuerelement die fünf Erdteile unterhalb des Stammknotens Erde ausgegeben werden.

Abbildung 14.34 Einfache Anzeige in einem »TreeView«-Steuerelement

In einem TreeView-Objekt, das auch als Strukturansicht bezeichnet wird, spielt noch eine weitere Klasse eine ganz maßgebliche Rolle: TreeNode. Ein Objekt vom Typ TreeNode entspricht einem Knoten in der Strukturansicht – unabhängig von der Position innerhalb der hierarchischen Struktur. In Abbildung 14.34 haben wir es demnach mit sechs TreeNode-Objekten zu tun: Erde, Amerika, Asien, Afrika, Australien und Europa.

Das TreeView und jeder darin angezeigte Knoten kann selbst wieder Ausgangspunkt einer Reihe weiterer untergeordneter Knoten sein. Jeder einzelne Knoten verwaltet die ihm untergeordneten Knoten in einer eigenen Auflistung vom Typ TreeNodeCollection. Das Strukturansicht-Steuerelement in der Abbildung enthält in seiner eigenen Auflistung nur ein TreeNode-Objekt, nämlich Erde. Dieser Knoten wird von der TreeNodeCollection des Controls verwaltet, während die Elemente Amerika, Asien usw. in der TreeNodeCollection des Knotens Erde enthalten sind.

Die Eigenschaft Nodes liefert die Referenz auf die Auflistung. So wie alle anderen Auflistungen enthält auch dieser Typ Methoden, um auf die verwalteten TreeNode-Objekte zuzugreifen, neue hinzuzufügen oder verwaltete zu löschen.

Jetzt kennen Sie die wichtigsten Grundlagen, und wir können uns den Programmcode ansehen, der zu der Ausgabe in Abbildung 14.34 führt.

TreeView tr = new TreeView(); 
tr.Dock = DockStyle.Fill; 
tr.Nodes.Add("Erde"); 
tr.Nodes[0].Nodes.Add("Amerika"); 
tr.Nodes[0].Nodes.Add("Asien"); 
tr.Nodes[0].Nodes.Add("Afrika"); 
tr.Nodes[0].Nodes.Add("Australien"); 
tr.Nodes[0].Nodes.Add("Europa"); 
this.Controls.Add(tr);

Nach der Instanziierung mit

TreeView tr = new TreeView();

sowie der Positionierung und Größenfestlegung wird das Stammelement Erde hinzugefügt, indem zu der TreeNodeCollection der Strukturansicht ein TreeNode-Objekt hinzugefügt wird:

tr.Nodes.Add("Erde");

Erde ist das erste Element in der Auflistung und hat den Index 0. Es wird auch als Stammelement bezeichnet. Sie können anstelle einer Zeichenfolge auch die Referenz auf ein TreeNode-Objekt übergeben.

Weil auch das TreeNodeCollection-Objekt, wie die meisten anderen Auflistungen, einen Indexer bereitstellt, kann man sich durch Angabe des Index die Referenz auf ein Element besorgen und über dessen Eigenschaft Nodes wiederum die Referenz auf dessen TreeNodeCollection erhalten. Darauf lässt sich erneut die Add-Methode aufrufen, z. B. so:

tr.Nodes[0].Nodes.Add("Amerika");

Alle Elemente unterhalb der Stammelemente werden als untergeordnete Elemente bezeichnet. Ein solches untergeordnetes Element ist demnach auch Amerika. In gleicher Weise lassen sich auch die anderen Erdteile der Auflistung hinzufügen.

Alternativ bietet sich auch die AddRange-Methode an, die ein Array vom Typ TreeNode entgegennimmt.

TreeNode[] nodesErde = new TreeNode[]{ 
  new TreeNode("Amerika"), 
  new TreeNode("Asien"), 
  new TreeNode("Afrika"), 
  new TreeNode("Australien"), 
  new TreeNode("Europa")}; 
tr.Nodes[0].Nodes.AddRange(nodesErde);

Ausnahmslos jedes in einer Strukturansicht angezeigte Element wird als TreeNode-Objekt betrachtet, das über eine eigene Auflistung ihm untergeordneter TreeNode-Objekte verfügt, die nur dann leer ist, wenn das Element das letzte in der Hierarchie ist. Mit dieser Erkenntnis können wir unser Beispiel auch beliebig tiefer strukturieren und jedem Erdteil Staaten zuordnen, die dann selbst wieder in ihrer eigenen Auflistung Städte enthalten.

Das erste Beispiel zum TreeView-Steuerelement wird jetzt in diesem Sinn ergänzt: Es werden ein paar Staaten Amerikas und Europas ergänzt, zusätzlich Städte in Deutschland und den USA.

TreeView tr = new TreeView(); 
tr.Location = new Point(0,0); 
tr.Size = this.ClientSize; 
tr.Nodes.Add("Erde");

TreeNode[] nodesErde = new TreeNode[]{ new TreeNode("Amerika"), 
  new TreeNode("Asien"), new TreeNode("Afrika"), 
  new TreeNode("Australien"), new TreeNode("Europa")}; 
tr.Nodes[0].Nodes.AddRange(nodesErde);

// Element 'Europa' ergänzen 
TreeNode europa = tr.Nodes[0].Nodes[4]; 
europa.Nodes.Add("England"); 
europa.Nodes.Add("Frankreich"); 
europa.Nodes.Add("Deutschland"); 
europa.Nodes.Add("Italien");

// Element 'Deutschland' ergänzen 
TreeNode deutschland = europa.Nodes[2]; 
deutschland.Nodes.Add("Bonn"); 
deutschland.Nodes.Add("Aachen"); 
deutschland.Nodes.Add("Hamburg"); 
deutschland.Nodes.Add("Berlin");

// Element 'Amerika' ergänzen 
TreeNode amerika = tr.Nodes[0].Nodes[0]; 
amerika.Nodes.Add("USA"); 
amerika.Nodes.Add("Kanada"); 
amerika.Nodes.Add("Mexiko");

// Element 'USA' ergänzen 
TreeNode usa = amerika.Nodes[0]; 
usa.Nodes.Add("Miami"); 
usa.Nodes.Add("New York"); 
usa.Nodes.Add("San Francisco"); 
usa.Nodes.Add("Seattle");

this.Controls.Add(tr);

Falls alle Knoten geöffnet werden, wird das Programm eine Anzeige wie in Abbildung 14.35 liefern. Beachten Sie, dass das TreeView-Objekt standardmäßig eine Bildlaufleiste einblendet, sobald die Länge der Liste die Höhe des Steuerelements überschreitet.

Abbildung 14.35 Tiefer strukturiertes »TreeView«-Steuerelement

Deutlich ist am Programmcode zu erkennen, dass, je tiefer die Hierarchiestruktur geht, der Code immer unübersichtlicher wird. Zur besseren Lesbarkeit wird deshalb eine interne TreeNode-Referenz benutzt, die einen Knoten im Inneren der Hierarchie referenziert.

TreeNode europa = tr.Nodes[0].Nodes[4];

Die Referenz europa verweist hier auf den fünften Knoten des Stammelements, also erde. Damit reduziert sich der Code, um einen europäischen Staat hinzuzufügen, auf:

europa.Nodes.Add("England");

Ansonsten hätte die Anweisung

tr.Nodes[0].Nodes[4].Nodes.Add("England");

lauten müssen.

Beispielprogramm mit »TreeView«

Wir wollen das Erlernte auch sofort in einem kleinen Beispiel umsetzen. Unsere Aufgabe soll es sein, in einem TreeView-Control sämtliche Steuerelemente der aktuellen Form anzuzeigen. Dabei soll die interne Struktur aller Containersteuerelemente ersichtlich sein. In der Strukturansicht soll jeder Elementeintrag durch ein steuerelementspezifisches Bildchen ergänzt werden, und der Beschriftungstext soll den Objektnamen und den Typ enthalten. In Abbildung 14.36 sehen Sie die Ausgabe des Beispielprogramms.

Abbildung 14.36 Die Ausgabe des Beispiels »ShowControlsOnForm«

// ---------------------------------------------------------
// Beispiel: ...\Kapitel 14\ShowControlsOnForm
// -------------------------------------------------------------
public partial class Form1 : Form {

  private void btnShowControls(object sender, EventArgs e) { 
    this.treeView1.Nodes.Add(this.Name); 
    TreeNode[] nodesForm = new TreeNode[this.Controls.Count]; 
    this.treeView1.Nodes[0].ImageIndex = 5; 
    this.treeView1.Nodes[0].SelectedImageIndex = 
                       this.treeView1.Nodes[0].ImageIndex; 
    this.GetControls(this.Controls, this.treeView1.Nodes[0]); 
  }

  private void GetControls(IList controls, TreeNode node) { 
    foreach (Control control in controls) { 
      int index = node.Nodes.Add(new TreeNode(control.Name)); 
      // das passende Image einfügen 
      SetImage(node, control, index); 
      if (control.Controls.Count > 0) 
        GetControls(control.Controls, node.Nodes[index]); 
      } 
    } 
  }

  private static void SetImage(TreeNode node, Control control, int index) { 
    if (control is Button) { 
      node.Nodes[index].ImageIndex = 0; 
      node.Nodes[index].Text = control.Name + " (Button)"; 
    } 
    else if (control is GroupBox) { 
      node.Nodes[index].ImageIndex = 1; 
      node.Nodes[index].Text = control.Name + " (GroupBox)"; 
    } 
    else if (control is RadioButton) { 
      node.Nodes[index].ImageIndex = 2; 
      node.Nodes[index].Text = control.Name + " (RadioButton)"; 
    } 
    else if (control is TextBox) { 
      node.Nodes[index].ImageIndex = 3; 
      node.Nodes[index].Text = control.Name + " (TextBox)"; 
    } 
    else if (control is TreeView) { 
      node.Nodes[index].ImageIndex = 4; 
      node.Nodes[index].Text = control.Name + " (WreeView)"; 
    } 
    node.Nodes[index].SelectedImageIndex = 
                               node.Nodes[index].ImageIndex; 
  } 
}

btnShowControls ist hier der Ereignishandler der Schaltfläche mit der Beschriftung Anzeigen. Hier wird zuerst der Stammknoten erzeugt, der die Form beschreibt. Die Form ist bekanntermaßen ein Container für Steuerelemente. Aus der ControlCollection, deren Referenz uns die Eigenschaft Controls der Form liefert, ermitteln wir die Anzahl der verwalteten Steuerelemente und erzeugen ein passend großes TreeNode-Array.

Solange in der Form keine weiteren Containersteuerelemente enthalten sind, ist die Sache sehr einfach, denn dann werden automatisch alle Controls erfasst. Sollte allerdings (wie auch in unserem Beispiel) sich darunter mindestens ein Control befinden, das in einer eigenen ControlCollection die ihm zugeordneten Steuerelemente verwaltet, müssen wir auch diese Steuerelementauflistungen durchlaufen. Dazu dient die Methode GetControls, die sogar rekursiv aufgerufen werden muss, um auch eine etwaige tiefere Strukturierung zu erfassen.

SetImage hat die Aufgabe, den Typ des gefundenen Steuerelements zu ermitteln und aus der ImageList das passende Symbol festzulegen. Wir müssen wohl darauf achten, dass keine Symbolumschaltung erfolgt, wenn sich der Zustand eines Strukturelements ändert. Daher wird in SetImage mit

node.Nodes[index].SelectedImageIndex = node.Nodes[index].ImageIndex;

der Index des ausgewählten Zustands gleich dem des nicht ausgewählten Zustands gesetzt.


Galileo Computing - Zum Seitenanfang

14.19.2 Eigenschaften des »TreeView«-Steuerelements Zur nächsten ÜberschriftZur vorigen Überschrift

In der »normalen« Ansicht werden geschlossene Knotenpunkte durch ein »+«-Symbol gekennzeichnet, geöffnete durch »-«. Der aktuelle markierte Knoten wird farblich invertiert dargestellt. Von vielen Installationsroutinen her wissen Sie, dass Strukturansichten mit Auswahlfeldern bestückt sind, aus denen der Anwender auswählen kann. Diese können Sie auch anbieten, indem Sie die Eigenschaft CheckBoxes=true festlegen. Die Einzugsbreite der untergeordneten Knoten ist per Vorgabe 19 Pixel. Verkleinern oder vergrößern können Sie diese Angabe mit der Eigenschaft Indent.

Beabsichtigen Sie, die Darstellung optisch auch ein wenig netter zu gestalten, sollten Sie für die Knoten Bildchen in Betracht ziehen. Die Gesamtverwaltung aller Knotensymbole obliegt dem TreeView, nicht den einzelnen Knoten selbst. Verwaltet werden die Symbole von einem ImageList-Objekt, das Sie vorher der Form hinzufügen müssen und der gleichnamigen Eigenschaft des TreeView im Eigenschaftsfenster angeben. Da eine ImageList nicht sehr intuitiv ist, sollten Sie bei der Zusammenstellung der Symbole sofort berücksichtigen, dass ausgewählte und nicht ausgewählte Elemente in der Strukturansicht üblicherweise mit unterschiedlichen Bildchen gekennzeichnet werden, die alle in dieser ImageList enthalten sein müssen. Besser wäre es sicherlich gewesen, wenn uns Microsoft für jeden Zustand je eine Bildauflistung spendiert hätte.

Im TreeView können Sie auch einstellen, welches Bildchen standardmäßig bei einem ausgewählten bzw. nicht ausgewählten Knoten angezeigt werden soll. Dazu dienen die Eigenschaften ImageIndex/IndexKey (nicht ausgewählt) und SelectedImageIndex/SelectedImageKey (ausgewählt). Die Einstellungen kommen nur in dem Fall zum Tragen, wenn einem Knoten kein spezielles Symbol zugeordnet wird.

Unter StateImageList dürfen Sie auch eine zweite ImageList angeben. Hier tragen Sie nur zwei Bildchen ein, die in den Auswahlkästchen für den Zustand »ausgewählt« und »nicht ausgewählt« stehen. Das erste Symbol kennzeichnet hier den nicht ausgewählten Zustand, das zweite den ausgewählten. Sie dürfen dieser ImageList natürlich auch noch mehr Symbole hinzufügen, um für jeden Knoten ein ganz individuelles Bildchen im Kontrollkästchen zuzuordnen. Trotzdem würde ich davon abraten, weil zu viele Symbole den Benutzer nur irritieren.

Das aktuell markierte Element in der Strukturansicht wird farbig in einer Breite hervorgehoben, die der Breite der Beschriftung entspricht. Sie können die farbige Hervorhebung aber auch über die gesamte Breite der Strukturansicht spannen. Dazu dient die Eigenschaft FullRowSelect=true. Allerdings wirkt sich diese Einstellung nur dann aus, wenn ShowLines=false ist. Mit ShowLines werden die Linien zwischen den neben- und untergeordneten Elementen dargestellt, mit LineColor wird deren Farbe festgelegt.

Wenn Sorted auf true festgelegt ist, werden die TreeNode-Objekte in alphabetischer Reihenfolge nach den Werten ihrer Text-Eigenschaft sortiert. Hier muss allerdings auch darauf hingewiesen werden, dass bei einer großen Anzahl von Elementen immer die Methoden BeginUpdate und EndUpdate aufgerufen werden sollten, um Leistungseinbußen zu verhindern. Haben Sie zudem LabelEdit=true eingestellt, kann der Benutzer zur Laufzeit den Beschriftungstext ändern. Sie müssen dann die Methode Sort aufrufen, um die Elemente neu zu sortieren.

Es ist nicht üblich, in einer Strukturansicht auf die Plus-/Minusschaltflächen zu verzichten. Falls Sie das jedoch anstreben, können Sie diesen Effekt mit ShowPlusMinus=false erreichen. ShowRootLines steuert letztendlich die Anzeige von Linien zwischen den Stammknoten.

Damit sind noch nicht alle Möglichkeiten des TreeView erschöpft.

Wenn die HotTracking-Eigenschaft auf true festgelegt ist, wird jede Strukturknotenbezeichnung als Hyperlink dargestellt, während der Mauszeiger darüber bewegt wird. Dabei wird die Schrift unterstrichen und in Blau festgelegt. Die Darstellung wird nicht durch die Interneteinstellungen im Betriebssystem des Benutzers gesteuert, Sie können sie also nicht beeinflussen.

Manchmal muss der markierte Knoten abgerufen oder ein bestimmter Knoten ausgewählt werden. Hier hilft die Eigenschaft SelectedNode weiter, die die Referenz des TreeNode-Objekts zurückliefert oder entgegennimmt:

Der Eigenschaft PathSeparator eines TreeView-Objekts kommt im Zusammenhang mit der Eigenschaft FullPath eines TreeNode-Objekts besondere Bedeutung zu. FullPath liefert für jeden Knoten eine Zeichenfolge zurück, in der der Bezeichner des Knotens mit allen seinen zum Ursprung zurückführenden Knoten verbunden wird. PathSeparator legt das Trennzeichen fest, das standardmäßig ein Backslash ist.


Galileo Computing - Zum Seitenanfang

14.19.3 Die Ereignisse des »TreeView«-Steuerelements Zur nächsten ÜberschriftZur vorigen Überschrift

Die wichtigsten objektspezifischen Ereignisse hängen mit dem Aufklappen und Schließen eines Knotenpunkts zusammen. Für jede der genannten Benutzeraktionen löst das TreeView-Steuerelement jeweils zwei Ereignisse aus: eines, das auftritt, bevor die damit verbundene, sichtbare Reaktion des Knotens erfolgt (BeforeExpand bzw. BeforeCollapse), und eines zum Abschluss des Vorgangs (AfterExpand bzw. AfterCollapse).

In diesem Zusammenhang spielen auch noch drei weitere Ereignisse eine Rolle. Wird der angeklickte Knoten beim Öffnen oder Schließen gleichzeitig ausgewählt, haben wir es mit dem Ereignispaar BeforeSelect und AfterSelect zu tun. Jedoch wird unabhängig davon, ob ein Knotenelement beim Anklicken ausgewählt ist oder nicht, in jedem Fall NodeMouseClick ausgelöst.


Tabelle 14.17 Ereignisse, die mit der Knotenauswahl ausgelöst werden können

Ereignis Beschreibung

BeforeExpand

Wird ausgelöst, bevor der Knoten geöffnet wird.

AfterExpand

Wird ausgelöst, nachdem der Knoten geöffnet worden ist.

BeforeSelect

Wird ausgelöst, bevor ein Knoten ausgewählt wird.

AfterSelect

Wird ausgelöst, nachdem ein Knoten ausgewählt wurde.

BeforeCollaps

Wird ausgelöst, bevor der Knoten geschlossen wird.

AfterCollaps

Wird ausgelöst, nachdem der Knoten geschlossen worden ist.

NodeMouseClick

Wird ausgelöst, wenn der Benutzer auf ein treeNode klickt.


BeforeExpand, BeforeSelect und BeforeCollapse übergeben dem Ereignishandler ein Objekt vom Typ TreeViewCancelEventArgs, und die Ereignisse AfterExpand, AfterSelect und AfterCollapse übergeben ein Objekt vom Typ TreeViewEventArgs. Das zuerst aufgeführte Args-Objekt, dessen spezifische Eigenschaften wir uns nun in einer Tabelle ansehen wollen, unterscheidet sich nur dadurch, dass der eingeleitete Vorgang mit Cancel abgebrochen werden kann.


Tabelle 14.18 Eigenschaften eines »TreeViewCancelEventArgs«-Objekts

Eigenschaft Beschreibung

Action

Ruft den Typ der Enumeration TreeViewAction ab, die das Ereignis ausgelöst hat.

Cancel

Ruft einen Wert ab, der angibt, ob das Ereignis abgebrochen werden soll, oder legt diesen fest.

Node

Ruft die Referenz auf den Strukturknoten ab, der aktiviert, erweitert, reduziert oder ausgewählt werden soll.


Die Action-Eigenschaft sollten wir uns noch einmal genauer ansehen. Sie ist vom Typ der Enumeration TreeViewAction und liefert uns einen Wert, aus dem die Ursache der Ereignisauslösung entnommen werden kann.


Tabelle 14.19 Konstanten der Enumeration »TreeViewAction«

Member Beschreibung

Unknown

Die Aktion, die das Ereignis ausgelöst hat, ist unbekannt.

ByKeyboard

Eine Tastatureingabe hat das Ereignis ausgelöst.

ByMouse

Ein Mausvorgang hat das Ereignis ausgelöst.

Collapse

Das Ereignis wurde durch das Zusammenklappen eines Knotens ausgelöst.

Expand

Das Ereignis wurde durch das Expandieren eines Knotens ausgelöst.



Galileo Computing - Zum Seitenanfang

14.19.4 Weitere Eigenschaften und Methoden des »TreeView«-Objekts Zur nächsten ÜberschriftZur vorigen Überschrift

Die Ansicht des TreeView-Objekts wird jedes Mal aktualisiert, sobald ein Element hinzugefügt wird. Das kann zu Leistungseinbußen und zum Flackern der Anzeige führen, wenn beispielsweise in einer Schleife viele Strukturknoten hinzugefügt werden. Um das zu vermeiden, sollte man vor Beginn der Einfügeoperationen die Methode BeginUpdate aufrufen. Damit wird das Zeichnen des Steuerelements so lange unterbunden, bis die EndUpdate-Methode aufgerufen wird. Die gesamte Hierarchiestruktur des TreeView-Objekts kann mit den Methoden ExpandAll und CollapseAll auch per Programmcode entweder erweitert oder reduziert werden.

Die Klasse TreeNode veröffentlicht ihrerseits Methoden, mit denen die untergeordnete Struktur eines bestimmten Knotens erweitert oder reduziert wird – ungeachtet der Tatsache, dass ein Klick des Benutzers auf das standardmäßige »+«- oder »-«-Zeichen dieselbe Reaktion des Knotens bewirkt.

In der folgenden Tabelle werden die in diesem Abschnitt aufgeführten Methoden noch einmal zusammengefasst.


Tabelle 14.20 Methoden des »TreeView«-Objekts

Eigenschaft/Methode Beschreibung

BeginUpdate

Deaktiviert das Neuzeichnen des Steuerelements.

CollapseAll

Reduziert alle Strukturknoten.

EndUpdate

Aktiviert das Neuzeichnen des Steuerelements.

ExpandAll

Expandiert alle Strukturknoten.



Galileo Computing - Zum Seitenanfang

14.19.5 Eigenschaften und Methoden des »TreeNode«-Objekts topZur vorigen Überschrift

Bei einigen Operationen muss ein bestimmter Knoten zuerst identifiziert werden. Drei Eigenschaften unterstützen dies.


Tabelle 14.21 Eigenschaften zur Identifizierung eines »TreeNode«-Objekts

Eigenschaft Beschreibung

Index

Ruft die Position des aktuellen Knotens in der Auflistung des übergeordneten Knotens ab.

Text

Ruft den in der Bezeichnung des TreeNode-Objekts angezeigten Text ab oder legt diesen fest.

TreeView

Ruft die Referenz des übergeordneten TreeView-Objekts ab, dem das TreeNode-Objekt zugewiesen ist.


Viele Eigenschaften dienen zur Navigation durch die Hierarchie. Mit Parent kann zum Beispiel der übergeordnete Knoten bestimmt werden, mit FirstNode, LastNode, PrevNode und NextNode kann zu den nebengeordneten Knoten auf gleicher Hierarchieebene bzw. zu den untergeordneten Knoten navigiert werden. Alle geben die Referenz auf das angesteuerte TreeNode-Objekt zurück.

Die TreeNode-Klasse veröffentlicht mit IsExpanded und IsSelected zwei Eigenschaften, mit denen im Programmcode festgestellt werden kann, ob ein Knoten aktuell reduziert, erweitert oder markiert ist.

Das Strukturansicht-Steuerelement unterstützt die Methoden ExpandAll und CollapseAll, um alle Knotenelemente zu erweitern oder zu reduzieren. Ein TreeNode-Objekt verfügt über ähnliche Methoden, allerdings beziehen sich diese immer auf den aktuellen Knoten: Collapse, Expand, ExpandAll und Toggle. Mit der Methode Toggle invertiert der Knoten seinen Zustand, also entweder von erweitert nach reduziert oder von reduziert nach erweitert.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück
  Zum Katalog
Zum Katalog: Visual C# 2008
Visual C# 2008
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Visual C# 2012






 Visual C# 2012


Zum Katalog: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de