Scrollen bei Drag and Drop im TreeView

TreeView-Steuerelemente enthalten gelegentlich mehr Einträge, als gleichzeitig dargestellt werden können. Dank der Bildlaufleisten ist das kein Problem. Wenn Sie jedoch mit Drag and Drop arbeiten und einen Eintrag an eine Stelle verschieben möchten, die aktuell nicht sichtbar ist, stehen Sie auf dem Schlauch: Scrolling während Drag and Drop wird vom TreeView-Steuerelement nicht unterstützt. Mit diesem Beitrag rüsten wir dieses Feature nach.

Das TreeView-Steuerelement bietet schon eine Menge Features, aber an das Scrolling beim Ziehen von Elementen bis an den oberen oder unteren Rand heran hat man wohl nicht gedacht. Zum Glück gibt es Möglichkeiten, dieses Feature nachzurüsten. Die Prozedur aus Listing 1 stattet das sonst unberührte TreeView-Steuerelement namens ctlTreeView mit den wichtigsten Eigenschaften aus und füllt es mit ausreichend Elementen zum Testen der nachfolgend vorgestellten Technik (s. Abb. 1).

Listing 1: Füllen und Anpassen des TreeView-Steuerelements

Private Sub Form_Load()
    Dim i As Integer
    Dim j As Integer
    Dim objNode As MSComctlLib.Node
    Set objTreeView = Me!tvwScrolling.Object
    With objTreeView
        .Appearance = ccFlat
        .BorderStyle = ccNone
        .Font.Name = "Calibri"
        .Font.Size = "9"
        .LineStyle = tvwRootLines
        .OLEDragMode = ccOLEDragAutomatic
        .OLEDropMode = ccOLEDropManual
    End With
    For i = 1 To 10
        Set objNode = objTreeView.Nodes.Add(, , "a" & i, "Element " & i)
        objNode.Expanded = True
        For j = 1 To 10
            Set objNode = objTreeView.Nodes.Add("a" & i, tvwChild, "a" & i & "_" & j, _
            "Element " & i & "_" & j)
        Next j
    Next i
End Sub

pic001.png

Abb. 1: TreeView-Steuerlement mit Testeinträgen

Damit wir die Ereignisse des TreeView-Steuerelements implementieren können, speichern wir einen Objektverweis in einer modulweit deklarierten Variable:

Dim WithEvents objTreeView As MSComctlLib.TreeView

Nach diesen Vorbereitungen stellt sich nun die Frage, wie sich das Scrollen realisieren lässt.

Dieses Problem lässt sich in zwei kleinere Probleme aufteilen: Wie bewegen wir das TreeView-Steuerelement dazu, seinen Inhalt zu scrollen und wie sorgen wir dafür, dass dies genau dann geschieht, wenn ein Element per Drag and Drop an den oberen beziehungsweise unteren Rand geführt wird

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar