ContextMenuStrip的SourceControl在ToolStripMenuItem中是什么?单击?

时间:2010-06-22 08:44:53

标签: .net vb.net contextmenu toolstrip

我将单ContextMenuStrip附加到更多控件上。

使用Opening ContextMenuStrip事件来过滤/禁用某些上下文条目。 在这种情况下,属性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.SourceControlNothing

你知道出了什么问题,或者为什么在这种情况下没有设置SourceControl?

提前谢谢

3 个答案:

答案 0 :(得分:1)

我发现一个解决方法并不是问题的答案。所以我会把它打开一段时间。

我使用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个事件中的已保存对象。

答案 1 :(得分:1)

试试这个:

DirectCast(DirectCast(DirectCast(
    tsmi.Owner, System.Windows.Forms.ToolStrip).
    TopLevelControl, System.Windows.Forms.Control),
    System.Windows.Forms.ContextMenuStrip).SourceControl

答案 2 :(得分:0)

几个星期前,我有同样的问题,实际上,没有人能够弄清楚为什么会出现这种情况。看看question I asked,我得到的解决方案效果很好。