Speichern Sie weitere benutzerdefinierte Daten im Baumknoten in Delphi

click fraud protection

Das TTreeView Delphi Komponente zeigt eine hierarchische Liste von Elementen an - Baumknoten. Ein Knoten wird durch Knotentext und ein optionales Bild dargestellt. Jeder Knoten in einer Baumansicht ist eine Instanz einer TTreeNode-Klasse.

Während Sie die Baumansicht zur Entwurfszeit mit Elementen füllen können, verwenden Sie die TreeView Items EditorIn den meisten Fällen füllen Sie Ihre Baumansicht zur Laufzeit - je nachdem, worum es in Ihrer Anwendung geht.

Der TreeView-Elementeditor zeigt an, dass Sie nur eine Handvoll Informationen an einen Knoten "anhängen" können: Text und einige Bildindizes (für den Normalzustand, erweitert, ausgewählt und ähnlich).

Im Wesentlichen ist die Baumansichtskomponente einfach zu programmieren. Es gibt verschiedene Methoden, um dem Baum neue Knoten hinzuzufügen und ihre Hierarchie festzulegen.

So fügen Sie der Baumansicht 10 Knoten hinzu (mit dem Namen "TreeView1"). Beachten Sie, dass die Items-Eigenschaft Zugriff auf alle Knoten in der Baumstruktur bietet. Das AddChild fügt der Baumansicht einen neuen Knoten hinzu. Der erste Parameter ist der übergeordnete Knoten (um die Hierarchie aufzubauen) und der zweite Parameter ist der Knotentext.

instagram viewer

Das AddChild gibt den neu hinzugefügten TTreeNode zurück. In obigem Codebeispielwerden alle 10 Knoten als Wurzelknoten hinzugefügt (haben keinen übergeordneten Knoten).

In komplexeren Situationen möchten Sie, dass Ihre Knoten mehr Informationen enthalten - vorzugsweise einige spezielle Werte (Eigenschaften), die für das von Ihnen entwickelte Projekt spezifisch sind.

Angenommen, Sie möchten Kundendaten aus Ihrer Datenbank anzeigen. Jeder Kunde kann mehr Bestellungen haben und jede Bestellung besteht aus mehr Artikeln. Dies ist eine hierarchische Beziehung, die in einer Baumansicht angezeigt werden kann:

In Ihrer Datenbank finden Sie weitere Informationen zu jeder Bestellung und zu jedem Artikel. In der Baumansicht wird der (schreibgeschützte) aktuelle Status angezeigt - und Sie möchten Details pro Bestellung (oder sogar pro Artikel) für die ausgewählte Bestellung anzeigen.

Wenn der Benutzer den Knoten "Order_1_1" auswählt, sollen die Bestelldetails (Gesamtsumme, Datum usw.) dem Benutzer angezeigt werden.

Sie können zu diesem Zeitpunkt die erforderlichen Daten aus der Datenbank abrufen, ABER Sie müssten die eindeutige Kennung (z. B. einen ganzzahligen Wert) der ausgewählten Reihenfolge kennen, um die richtigen Daten abzurufen.

Wir benötigen eine Möglichkeit, diese Auftragskennung zusammen mit dem Knoten zu speichern, können jedoch die Text-Eigenschaft nicht verwenden. Der benutzerdefinierte Wert, den wir in jedem Knoten speichern müssen, ist eine Ganzzahl (nur ein Beispiel).

In einem solchen Fall könnten Sie versucht sein, nach der Tag-Eigenschaft zu suchen (viele Delphi-Komponenten haben dies), aber die Tag-Eigenschaft wird von der TTreeNode-Klasse nicht verfügbar gemacht.

Hinzufügen von benutzerdefinierten Daten zu Baumknoten: Der Baumknoten. Dateneigenschaft

Mit der Data-Eigenschaft eines Baumknotens können Sie Ihre benutzerdefinierten Daten einem Baumknoten zuordnen. Daten sind a Zeiger und kann auf Objekte und Datensätze verweisen. Das Anzeigen von XML-Daten (RSS-Feed) in einer TreeView zeigt, wie a gespeichert wird Aufnahmetyp Variable in die Data-Eigenschaft eines Baumknotens.

Viele Elementtypklassen machen die Data-Eigenschaft verfügbar. Sie können jedes Objekt zusammen mit dem Element speichern. Ein Beispiel ist das TListItem einer TListView-Komponente. Hier ist So fügen Sie der Data-Eigenschaft Objekte hinzu.

Hinzufügen von benutzerdefinierten Daten zu Baumknoten: Die Baumansicht. CreateNodeClass

Wenn Sie die Data-Eigenschaft des TTreeNode nicht verwenden möchten, sondern Ihren eigenen TreeNode um einige Eigenschaften erweitern möchten, bietet Delphi auch eine Lösung.

Angenommen, Sie möchten dies tun können

So erweitern Sie den Standard-TTreeNode um einige eigene Eigenschaften:

  1. Erstellen Sie Ihren TMyTreeNode, indem Sie den TTreeNode erweitern.
  2. Fügen Sie eine Zeichenfolgeeigenschaft MyProperty hinzu.
  3. Behandeln Sie die OnCreateNodeClass für die Baumansicht, um anzugeben, dass Ihre Knotenklasse erstellt werden soll.
  4. Stellen Sie so etwas wie die TreeView1_SelectedNode-Eigenschaft auf Formularebene bereit. Dies wäre vom Typ TMyTreeNode.
  5. Behandeln Sie OnChange der Baumansicht, um den Wert des ausgewählten Knotens in den SelectedNode zu schreiben.
  6. Verwenden Sie TreeView1_Selected.myProperty, um neue benutzerdefinierte Werte zu lesen oder zu schreiben.

Hier ist der vollständige Quellcode (TButton: "Button1" und TTreeView: "TreeView1" in einem Formular):

Diesmal wird die Data-Eigenschaft der TTreeNode-Klasse nicht verwendet. Stattdessen erweitern Sie die TTreeNode-Klasse um Ihre eigene Version eines Baumknotens: TMyTreeNode.

Mit dem OnCreateNodeClass-Ereignis der Baumansicht erstellen Sie anstelle der Standard-TTreenode-Klasse einen Knoten Ihrer benutzerdefinierten Klasse.

instagram story viewer