VB.Net获取用于显示Contextmenu Strip的控件

时间:2016-06-08 10:56:18

标签: vb.net winforms contextmenu

我将单个上下文菜单附加到多个文本框。所以,我需要获取用于显示上下文菜单的控件名称/引用。

下面的

是我的上下文菜单的示例图像:

enter image description here

以下是绿色标记“粘贴”项目点击事件的代码:

    Dim objTSMI As ToolStripMenuItem
    Dim objCMS As ContextMenuStrip
    Dim objTxtBox As System.Windows.Forms.TextBox
    objTSMI = CType(sender, ToolStripMenuItem)
    objCMS = CType(objTSMI.Owner, ContextMenuStrip)
    objTxtBox = CType(objCMS.SourceControl, System.Windows.Forms.TextBox)
    If Clipboard.ContainsText(TextDataFormat.Text) = True Then
        objTxtBox.SelectedText = Clipboard.GetText(TextDataFormat.Text)
    End If

它非常好。

但下面是我的红色标记“页面计数”项目点击事件的代码:

    Dim objTSMI As ToolStripMenuItem
    Dim objCMS As ContextMenuStrip
    Dim objTxtBox As System.Windows.Forms.TextBox
    objTSMI = CType(sender, ToolStripMenuItem)
    objCMS = CType(objTSMI.Owner, ContextMenuStrip)
    objTxtBox = CType(objCMS.SourceControl, System.Windows.Forms.TextBox)
    MessageBox.Show(objTxtBox.Name)

但是上面会抛出以下错误:

Unable to cast object of type 'System.Windows.Forms.ToolStripDropDownMenu' to type 'System.Windows.Forms.ContextMenuStrip'.

这是错误的屏幕截图:

enter image description here

所以,我无法弄清楚问题是什么。

任何帮助都将受到高度赞赏

1 个答案:

答案 0 :(得分:2)

如果您检查this C# thread接受的答案,则说明这是一个错误。这里提供的解决方法使用私有变量将var labelWithTime = "label " + Date.now(); console.time(labelWithTime); // Do something console.timeEnd(labelWithTime); 存储在SourceControl的{​​{1}}事件上。我转换为VB.NET并使用Opening的{​​{1}}而不是使用变量。然后,您可以引用ContextMenuStrip属性而不是错误的Tag属性:

ContextMenuStrip