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