In Kontextmenü herausfinden welcher Button angeklickt wurde

27/03/2008 - 13:49 von Tamara Mikes | Report spam
Salü alle zusammen

Auf einer Form habe ich 20 Buttons. 8 Davon sind Button1, Button2, Button3
bis Button8. Die übrigen 12 sind Ok, Abbrechen, Optionen und anderes.

Auf den Buttons1 bis Button8 möchte ich ein Kontextmenü realisieren. Dies
muss eine Subrutiene in der Form MyFunction(2) aufrufen wenn das Kontextmenü
über den Button2 aufgerufen wurde, und MyFunction(3) wenn es über den
Button3 aufgerufen wurde.

Nun könnte ich natürlich hin gehen und 8 ToolStrimMenu Items erstellen. Das
finde ich aber nicht besonders elegant. Wie kann ich das besser lösen? Wie
kann ich heraus finden, auf welchen Button der Anwender rechts Klick gemacht
hat wenn ich im Code vom ToolStripMenu bin?

Vielen Dank für Hinweise
Gruss Tamara
 

Lesen sie die antworten

#1 Martin H.
27/03/2008 - 15:48 | Warnen spam
Hallo Tamara,

Auf den Buttons1 bis Button8 möchte ich ein Kontextmenü realisieren.
Dies muss eine Subrutiene in der Form MyFunction(2) aufrufen wenn das
Kontextmenü über den Button2 aufgerufen wurde, und MyFunction(3) wenn es
über den Button3 aufgerufen wurde.



Du könntest folgendes machen:
Du erstellst 1 Kontextmenü mit den benötigten Unterpunkten (also jeweils
einen pro Button).

Im MouseDown-Ereignis für die Buttons kannst Du den jeweils benötigten
Punkt sichtbar machen (Visible = True) und die anderen unsichtbar machen
(Visible = False).

Erzeuge in Deinem Form eine ContextMenuStrip mit dem Namen
ContextMenuStrip1 und weise es allen Buttons (1...8) als ContextMenu zu.

Dann füge den folgenden Code in Dein Form ein:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As _
System.EventArgs) Handles Me.Load
With Me.ContextMenuStrip1
Dim it As ToolStripMenuItem
Dim t As Integer
For t = 1 To 8
it = New ToolStripMenuItem("Dies ist der Menüpunkt für _
Button " & CStr(t) & ".", Nothing, AddressOf ContextMenuClick)
it.Name = "ContextMenu_Button" & CStr(t)
ContextMenuStrip1.Items.Add(it)
Next
End With
End Sub

Private Sub Buttons_MouseDown(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown, _
Button2.MouseDown, Button3.MouseDown, Button4.MouseDown, _
Button5.MouseDown, Button6.MouseDown, Button7.MouseDown, _
Button8.MouseDown

If e.Button = Windows.Forms.MouseButtons.Right Then
Dim tB As Button = CType(sender, Button)
Dim t As Integer
Dim it As ToolStripMenuItem
For t = 0 To ContextMenuStrip1.Items.Count - 1
it = CType(ContextMenuStrip1.Items.Item(t), _
ToolStripMenuItem)
it.Visible = (it.Name = "ContextMenu_" & tB.Name)
Next
End If
End Sub

Private Sub ContextMenuClick(ByVal sender As System.Object, ByVal e As
System.EventArgs)
Dim it As ToolStripMenuItem = CType(sender, ToolStripMenuItem)
MsgBox(it.Name)
End Sub


Erklàrung:
In Form1_Load werden die 8 verschiedenen Kontextmenüpunkte erzeugt, das
generelle Klick-Ereignis zugewiesen und an das Kontextmenü gehàngt.

Im Buttons_MouseDown wird nur der jeweilige KontextMenüpunkt
eingeschaltet, wenn der Name zu dem jeweiligen Button paßt.
Also ContextMenu_Button1 -> Button1, ContextMenu_Button2 -> Button2 etc.

ContextMenuClick ist dann das Click-Ereignis für alle erstellten
Kontextmenüpunkte. Zur Demonstration wird der Name des angeklickten
Menüpunktes in einer Combobox ausgegeben.

Beste Grüße,

Martin

Ähnliche fragen