如何找到ContextMenuStrip的发件人?

时间:2015-07-15 11:51:37

标签: vb.net

情况: 我在VB.net表单中有一个上下文菜单,在ItemClicked上触发一个事件处理程序。自动生成的子网接收sendere作为参数。由于我没有多次重新发明轮胎,我将此上下文菜单链接到三个文本框,让我们将它们命名为Textbox1,Textbox2和Textbox3。

问题:如何弄清楚菜单打开的文本框?

好的,我已经尝试了什么?

  • sender包含菜单本身,
  • e.ClickedItem只返回所选的单个菜单项。
  • sender.Parent永远都不是
  • sender.OwnerItem也总是Nothing`
  • Me.Textbox1.Focused始终为False,即使它是"父母"控制菜单。

1 个答案:

答案 0 :(得分:1)

好的,我找到了一个工作正常的解决方案,这里是所有具有相同问题的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