我将单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.SourceControl
是Nothing
。
你知道出了什么问题,或者为什么在这种情况下没有设置SourceControl?
提前谢谢
答案 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,我得到的解决方案效果很好。