代码之家  ›  专栏  ›  技术社区  ›  Drake

ContextMenuStrip的SourceControl在ToolStripMenuItem Click中不存在?

  •  0
  • Drake  · 技术社区  · 14 年前

    我有个单身汉 ContextMenuStrip 附加到更多控件。

    Opening 事件 右键菜单 在这种情况下,财产 ContexteMenuStrip.SourceControl

    我遇到的问题是 ToolStripMenuItem . 此项目位于 ToolStripDropDown

    我得到的父项的代码为:

    Dim tsmi As ToolStripMenuItem = DirectCast(DirectCast(DirectCast(sender, ToolStripMenuItem).Owner, ToolStripDropDown).OwnerItem, ToolStripMenuItem)
    

    然后我得到ContextMenuStrip:

    Dim contextMenu As ContextMenuStrip = DirectCast(tsmi.Owner, ContextMenuStrip)
    

    但是现在,如果我查一下 contextMenu.SourceControl Nothing .

    你知道什么是错误的吗?为什么在这种情况下没有设置SourceControl?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Drake    14 年前

    我找到了一个不是问题答案的解决方法。所以我会让它开一段时间。

    我用了 ContextMenuStrip Opening 事件本地存储源对象。

    Private Sub contextGrid_Opening(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles contextGrid.Opening
    
      _ContextSourceGrid = DirectCast(contextGrid.SourceControl, DataGridView)
    
    End Sub
    

    并直接引用所有 ToolStripMenuItem Click 事件。

        2
  •  1
  •   Chris    12 年前

    试试这个:

    DirectCast(DirectCast(DirectCast(
        tsmi.Owner, System.Windows.Forms.ToolStrip).
        TopLevelControl, System.Windows.Forms.Control),
        System.Windows.Forms.ContextMenuStrip).SourceControl
    
        3
  •  0
  •   Community Ian Goodfellow    7 年前

    几周前我也有同样的问题,事实上,没有人能弄清楚为什么会发生这种行为。看一看这个 question I asked ,我得到的解决方案非常有效。