window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

Kontextmenüs im TreeView, Teil I: Anlegen und Löschen

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Das TreeView-Steuerelement eignet sich perfekt zur Anzeige hierarchischer Daten. Allerdings hat es einen Nachteil: Im Gegensatz zu gebundenen Formularen kann man darin nicht mal eben einen neuen Datensatz anlegen, einen Datensatz löschen oder bearbeiten. Dazu muss man Hand in Hand mit einem weiteren Element wie etwa einem Unterformular zur Anzeige des aktuellen Datensatzes arbeiten. Aber wie legt man mal eben einen neuen Datensatz von einem TreeView-Steuerelement aus an oder löscht ein Element Dies gelingt am einfachsten per Kontextmenü. Dieser Artikel liefert das nötige Know-how und einige Beispiele.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1311_TreeView.mdb.

Beispielformular

Als Beispielformular verwenden wir das im Artikel TreeView und Unterformulare aufgebaute Formular, das wir kopiert und frmTreeViewKontextmenue genannt haben.

Damit wir über das TreeView-Steueelement leicht neue Kunden hinzufügen können, haben wir es etwas umgestaltet: Statt wie zuvor alle Kunden in der ersten Ebene des TreeView-Steuerelements anzuzeigen, haben wir einen Root-Knoten namens Kunden angelegt und alle Kunden-Elemente unterhalb dieses Knotens hinzugefügt. Dazu waren die in Listing 1 dargestellten änderungen nötig. Dort fügen wir zunächst mit der Add-Methode das Root-Element mit dem Key-Wert r0 und dem Text Kunden hinzu. Dieses wird mit Expanded = True aufgeklappt. Die beim Durchlaufen der Tabelle tblKunden hinzugefügten Elemente legt die Prozedur dann unterhalb des Elements mit dem Key-Wert r0 an. Das Ergebnis sieht schließlich wie in Bild 1 aus.

Hinzufügen eines Root-Knotens zum TreeView-Steuerelement

Bild 1: Hinzufügen eines Root-Knotens zum TreeView-Steuerelement

Element löschen

Als Erstes wollen wir einen Kontextmenü-Eintrag hinzufügen, mit dem der Benutzer eines der Kunden-Elemente löschen kann. Das Kontextmenü soll beim Anklicken des zu löschenden Elements angezeigt werden und einen Eintrag namens Löschen anbieten. Um das Herunterdrücken der rechtem Maustaste abzufangen, verwenden wir die Ereignisprozedur, die durch das Ereignis MouseDown ausgelöst wird. Für ActiveX-Steuerelemente legen Sie eine solche Ereignisprozedur nicht über die entsprechende Eigenschaft im Eigenschaftsfenster an, sondern direkt im VBA-Fenster.

Für das TreeView-Steuerelement liegt bereits eine Objektvariable namens m_TreeView vor, die mit dem Schlüsselwort WithEvents deklariert wurde und somit auch Ereignisprozeduren ausführt.

öffnen Sie also das Klassenmodul Form_frmTreeviewKontextmenue und wählen Sie dann erst im linken Kombinationsfeld den Eintrag m_TreeView und im rechten den Eintrag MouseDown aus (siehe Bild 2).

Anlegen der Ereignisprozedur MouseDown

Bild 2: Anlegen der Ereignisprozedur MouseDown

Die auf diese Weise erstellte Ereignisprozedur m_TreeView_MouseDown liefert mit dem Parameter Button einen Wert, der über die betätigte Maustaste Auskunft gibt. Diesen können Sie über die beiden Konstanten acLeftButton oder acRightButton prüfen. In diesem Fall interessiert uns, ob der Benutzer die rechte Maustaste gedrückt hat. Wir können die Ereignisprozedur also mit einer Bedingung wie der folgenden anreichern:

Select Case Button
     Case acRightButton
         'Kontextmenü anzeigen
End Select

Fehlt nur noch der Code, der ermittelt, welches Element der Benutzer angeklickt hat und der das passende Kontextmenü zusammenstellt. Hat der Benutzer tatsächlich mit der rechten Maustaste auf das Treeview-Steuerelement geklickt, können verschiedene Fälle eintreten:

  • Er hat mit einer anderen Maustaste als der rechten geklickt.
  • Er hat mit der rechten Maustaste ein Element im TreeView-Steuerelement angeklickt.
  • Er hat mit der rechten Maustaste auf einen leeren Bereich im TreeView-Steuerelement geklickt.

Wenn der Benutzer kein Element getroffen hat, soll nichts geschehen. Aber wie prüfen wir das Indem wir die Funktion HitTest des TreeView-Steuerelements nutzen. Diese erwartet die Koordinaten für den Punkt, den der Benutzer angeklickt hat. Diese liefert die Ereignisprozedur MouseDown ebenfalls, und zwar mit den Parametern x und y.

Da wir Informationen von dem angeklickten Node-Element benötigen, in diesem Fall den Wert der Key-Eigenschaft, speichern wir den Verweis auf das Node-Element in einer Variablen zwischen.

Diese deklarieren wir vorher wie folgt:

Dim objNode As MSComctlLib.Node

Dem Key-Wert entnehmen wir zwei Informationen: den als erstes Zeichen angegebenen Buchstaben, der den Typ des Elements liefert (zum Beispiel r für Root, k für Kunde, b für Bestellung oder p für Bestellposition) und die folgende Zahlenkombination, die dem Primärschlüsselwert des Datensatzes in der passenden Tabelle entspricht.

Diese Informationen sollen ebenfalls gespeichert werden, und zwar in den folgenden Variablen:

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar