Rechtsklick auf Steuerelement abfangen

Rene42

Erfahrenes Mitglied
Guten Morgen,

Vom Grundsatz eine (hoffe ich zumindest) einfache Aufgabenstellung. Ich möchte bei einem Rechtsklick auf ein Steuerelement ein Contextmenu einblenden.

Sowohl das Steuerelement als auch das Contextmenu werden erst zur Laufzeit erzeugt. Ich habe es wie folgt versucht:

Code:
   AddHandler Auswahlliste.Click, AddressOf Starte_Context

   Private Sub Starte_Context(e As MouseEventArgs)

                   If e.Button = MouseButtons.Right Then Menü.Show()

   End Sub

Klicke ich mit links auf das Steuerelement wird Starte_Context aufgerufen und tut wie gewünscht nichts. Klicke ich mit Rechts auf das Steuerelement passiert nichts. Was läuft schief?
 
Die Signatur der Methode stimmt nicht.
Code:
    Private Sub Button_MouseDown(sender As Object, e As MouseEventArgs)
        If e.Button = MouseButtons.Right Then
            ' Do something
        End If
    End Sub
 
Das ist natürlich wahr. Habe den Code angepasst in

Code:
Private Sub Starte_Context(sender As Object, e As MouseEventArgs)

   'Wurde die rechte Maustaste gedrückt
   If e.Button = MouseButtons.Right Then

       'Menü anzeigen
       Menü.Show(Auswahlliste, New Point(e.X, e.Y))

   End If

End Sub

Klicke ich nun mit links auf das Steuerelement wird der Code aufgerufen, klicke ich mit Rechts wird nicht einmal der Haltepunkt in der if-Zeile angesprungen.
 
Keine Ahnung, was du falsch machst, hier einfach mal eine getestete Lösung:
Code:
Public Class Form1

    Dim ContextMenuTest As New ContextMenuStrip

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim ButtonTest As New Button
        Controls.Add(ButtonTest)
        AddHandler ButtonTest.MouseDown, AddressOf ButtonTest_MouseDown

        For i As Integer = 1 To 4
            Dim item As New ToolStripMenuItem("Item " & i.ToString)
            item.DropDownItems.Add("Sub Item " & i.ToString)
            ContextMenuTest.Items.Add(item)
        Next

    End Sub

    Private Sub ButtonTest_MouseDown(sender As Object, e As MouseEventArgs)
        Select Case e.Button
            Case MouseButtons.Left
                MessageBox.Show(e.Button.ToString)
            Case MouseButtons.Right
                ContextMenuTest.Show(CType(sender, Control), e.Location)
        End Select
    End Sub

End Class
 
Echt verwirrt. Scheinbar hatte ich das falsche Ereignis.

Bei MouseDown wird auch der Rechtslick erfasst. Bei Click wird der Rechtsklick nicht erfasst. Keine Ahnung warum. Aber vielen Dank.
 
Zurück