情况:
我有一个 VB.NET 窗体的上下文菜单,它在 ItemClicked
上触发了一个事件处理程序。自动生成的子例程接收 sender
和 e
作为参数。由于我不会多次重新发明轮子,因此我将此上下文菜单链接到三个文本框。我们将它们命名为 Textbox1、Textbox2 和 Textbox3。
问题:如何确定菜单是在哪个文本框中打开的?
好的,我已经尝试了什么?
sender
包含菜单本身,e.ClickedItem
仅返回所选的单个菜单项。sender.Parent
始终为空sender.OwnerItem
也始终为 Nothing`Me.Textbox1.Focused
始终是False
,即使它是菜单的“父”控件也是如此。
最佳答案
好的,我找到了一个工作正常的解决方案,下面是所有遇到相同问题的 VB.NET 编码人员的代码。
上下文菜单链接在 TextBox1 中,因此我们需要添加另一个事件处理程序,将发送控件保存到菜单中:
Private Sub TextBox1_MouseUp(sender As Windows.Forms.Control, e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseUp
If e.Button = Windows.Forms.MouseButtons.Right Then
ContextMenu.Tag = sender
End If
End Sub
这是单击菜单项时的事件处理程序代码:
Private Sub ContextMenu_ItemClicked(sender As System.Object, e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles ContextMenu.ItemClicked
ContextMenu.Close()
If ContextMenu.Tag Is Nothing Then
Debug.Print("debug info: forgot to set sender? well ... KABOOM!")
Exit Sub
End If
Dim oParent As Windows.Forms.Control
Try
oParent = ContextMenu.Tag
Catch ex As Exception
Debug.Print("debug info: tag contains data other than sender control. well ... KABOOM!")
Exit Sub
End Try
' Do fancy stuff here.
' Release sender
ContextMenu.Tag = Nothing
End Sub
关于vb.net - 如何找到 ContextMenuStrip 的发件人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31429616/