我在上下文菜单栏中有两个菜单项单击事件。 通过执行以下代码,我可以获得单击的上下文菜单项的源代码控制:
Control c = ((sender as ToolStripItem).Owner as ContextMenuStrip).SourceControl;
Screenshot of the context menu item
但是当我在另一个级别的上下文菜单项上使用此代码时,它将返回null。
Screenshot of the context menu item in another level
如何在第二个屏幕截图菜单项的click事件中获取sourcecontrol?
答案 0 :(得分:2)
可以从ContextMenuStrip中检索SourceControl ToolStripMenuItem(激活了上下文菜单的当前控件的引用),检查OwnerItem引用并移动直到OwnerItem
引用为null
,然后检查Owner值,该值引用了ContextMenuStrip
。
(不幸的是,SourceControl
引用仅在ContextMenuStrip
控件中可用。)
一种简单的替代方法是使用引用Field
的{{1}},其中当前的Control
已被激活(您只能有一个活动的ContextMenuStrip
)。
然后,ContextMenuStrip
中的任何一个都可以访问打开ContextMenuStrip
时设置的此字段引用(通过订阅Opened()
事件)。
然后在ToolStripMenuItem
关闭时,将字段引用设置回null
。
示例:
( ContextMenuStrip
是通用名称,必须将其设置为实际的控件名称。)
toolStripMenuItem