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

TreeView: Kategorien per Drag and Drop verwalten

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

Um die in einem TreeView-Steuerelement angezeigten Daten am einfachsten umzuorganisieren, ist Drag and Drop die einfachste Methode. Der Benutzer kann so eine Kategorie von der einen übergeordneten Kategorie zu einer anderen verschieben, Hauptkategorien anderen Kategorien unterordnen oder Unterkategorien zu Hauptkategorien machen. Dieser Artikel zeigt, wie Sie das Drag and Drop in unser Beispiel zur Verwaltung von Kategorien und Unterkategorien einbauen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 2001_KategorienDragAndDrop.accdb.

Voraussetzungen

Damit Drag and Drop wie hier beschrieben funktioniert, müssen Sie zwei Einstellungen für das TreeView-Steuerelement vornehmen. Dies erledigen wir in der Beispieldatenbank in der Prozedur Form_Load:

Private Sub Form_Load()
    Set m_TreeView = Me!ctlTreeview.Object
    With objTreeView
        ...
        .OLEDragMode = ccOLEDragAutomatic
        .OLEDropMode = ccOLEDropManual
    End With
    ...
End Sub

Wir verwenden das TreeView, das wir im Artikel Kategorien per TreeView verwalten erstellt haben, als Basis für die Beispiele dieses Artikels (siehe Bild 1).

Formular-Entwurf unseres Beispielformulars

Bild 1: Formular-Entwurf unseres Beispielformulars

Schritte im Drag and Drop-Vorgang

Der Start des Drag and Drop-Vorgangs erfolgt, wenn der Benutzer die linke Maustaste auf einem Element des TreeView-Steuerelements niederdrückt und das angeklickte Element dann mit der Maus an eine andere Stelle zieht. In diesem Moment wird das Ereignis OLEStartDrag ausgelöst.

Zu diesem Zeitpunkt können Sie erfassen, welches Element der Benutzer ziehen will. Solange er das Element nicht loslässt, wird ständig das Ereignis OLE-Drag-Over ausgelöst. Das können Sie dazu nutzen, die gerade überfahrenen potenziellen Ziele zum Loslassen des Elements optisch hervorzuheben.

Wenn der Benutzer die Maus mit dem gezogenen Element schließlich zur Zielposition bewegt hat und er die Maustaste loslässt, feuert das Ereignis OLEDragDrop. Hier ist dann die Gelegenheit, zu ermitteln, auf welches Element der Benutzer das Element fallen lässt und notwendige Schritte durchzuführen. Operationen wie etwa das ändern der übergeordneten Kategorie erfolgen nicht automatisch nur durch das Ziehen eines Elements an eine andere Position.

Ereignisprozeduren anlegen

Wir wollen zunächst die drei Ereignisprozeduren anlegen, die wir für das Implementieren der Drag and Drop-Funktion benötigen. Dazu wählen Sie im Klassenmodul des Formulars oben im linken Kombinationsfeld den Eintrag mit dem Namen des Steuerelements aus, hier also ctlTreeView. Das rechte Kombinationsfeld zeigt dann alle Ereignisse an, die für dieses Steuer-element zur Verfügung stehen (siehe Bild 2).

Anlegen der Ereignisprozeduren

Bild 2: Anlegen der Ereignisprozeduren

Wählen Sie hier nacheinander die Einträge OLEDragDrop, OLEDragOver und OLEStartDrag auf, um die drei Ereignisprozeduren anzulegen.

Vorarbeit für Drag and Drop

Um einen Drag and Drop sauber einzuleiten, müssen Sie beim Start des Vorgangs genau ermitteln, welches Element der Benutzer ziehen will. Normalerweise ermitteln Sie das angeklickte Element mit der Eigenschaft SelectedItem. Das geschieht aber erst nach dem Loslassen der Maustaste. Beim Drag and Drop drücken Sie aber die Maustaste herunter und ziehen dann das Element an die gewünschte Stelle. Das heißt, dass das zu bewegende Element nicht zuverlässig markiert ist. Es kann auch sein, dass das Element, das zuvor markiert war, nun von Selected-Item geliefert wird.

Sie müssen also entweder vor dem Drag and Drop einmal einen vollständigen Mausklick auf das Element tätigen, um dieses zunächst sicher zu markieren. Oder Sie ergänzen unsere Prozedur, die wir im oben genannten Artikel zum Anzeigen der Kontextmenüs erstellt haben, um zwei Codezeilen. Diese Prozedur wird durch das Ereignis MouseDown ausgelöst (siehe Listing 1). Wir stellen hier die Eigenschaft SelectedItem auf das Element ein, das wir mit der Eigenschaft HitTest für die mit den Parametern x und y gelieferten Koordinaten ermitteln. HitTest(x,y) liefert das Element, das sich beim Herunterdrücken der Maustaste genau unter dem Mauszeiger befindet.

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