RSS
StartseiteKnowledge LibraryTop 10Impressum

5.14 Wie zeige ich ein Kontextmenü in einem ListView/TreeView an?

VB5-VB6

Von: Thorsten Dörfler

Über die PopupMenu- Methode eines Formular/UserControl lässt sich an beliebiger Stelle der Anwendung ein Kontextmenü, das über den Menü-Editor erstellt wurde, anzeigen. Unter Windows werden Kontextmenüs gewöhnlich beim Lösen der rechten Maustaste angezeigt, also im MouseUp- Ereignis eines Steuerelements:

Private Sub Objekt_MouseUp(Button As Integer, Shift As Integer, _
                           X As Single, Y As Single)
  If (Button = vbRightButton) Then
    PopupMenu mnuContextMenu, vbPopupMenuRightButton
  End If
End Sub

Beim ListView bzw. TreeView macht eine zusätzliche Unterscheidung zwischen Eintrag und freier Fläche Sinn, um dem Anwender ggf. eine allgemeine Auswahl und eine spezielle, auf den aktuellen Eintrag bezogene, Auswahl anzubieten. Für diese Unterscheidung kann die HitTest- Methode des ListView/TreeView genutzt werden, die unter Angabe der Koordinaten, den an dieser Stelle befindlichen Eintrag angibt bzw. Nothing, wenn dort kein Eintrag zu finden ist:

' --- ListView ---
Private Sub ListView1_MouseUp(Button As Integer, Shift As Integer, _
                              X As Single, Y As Single)
  Dim lvItem As ListItem

  If (Button = vbRightButton) Then
    Set lvItem = ListView1.HitTest(X,Y)

    If (Not lvItem Is Nothing) Then
      ' Unter der Maus befindet sich ein Eintrag,
      ' lvItem enthält Informationen zu diesem:
      PopupMenu mnuContextMenu, vbPopupMenuRightButton
    Else
      ' Kein Eintrag unter der Maus ggf. Alternativmenü anzeigen
    End If
  End If
End Sub

' --- TreeView ---
Private Sub TreeView1_MouseUp(Button As Integer, Shift As Integer, _
                              X As Single, Y As Single)
  Dim tvNode As Node

  If (Button = vbRightButton) Then
    Set tvNode = TreeView1.HitTest(X,Y)

    If (Not tvNode Is Nothing) Then
      ' Unter der Maus befindet sich ein Eintrag,
      ' tvNode enthält Informationen zu diesem:
      PopupMenu mnuContextMenu, vbPopupMenuRightButton
    Else
      ' Kein Eintrag unter der Maus ggf. Alternativmenü anzeigen
    End If
  End If
End Sub