获取DropDownMenu的源代码控制

时间:2018-11-12 11:36:43

标签: c# .net vb.net winforms contextmenustrip

我在上下文菜单栏中有两个菜单项单击事件。 通过执行以下代码,我可以获得单击的上下文菜单项的源代码控制:

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?

1 个答案:

答案 0 :(得分:2)

可以从ContextMenuStrip中检索SourceControl ToolStripMenuItem(激活了上下文菜单的当前控件的引用),检查OwnerItem引用并移动直到OwnerItem引用为null,然后检查Owner值,该值引用了ContextMenuStrip
(不幸的是,SourceControl引用仅在ContextMenuStrip控件中可用。)

一种简单的替代方法是使用引用Field的{​​{1}},其中当前的Control已被激活(您只能有一个活动的ContextMenuStrip)。
然后,ContextMenuStrip中的任何一个都可以访问打开ContextMenuStrip时设置的此字段引用(通过订阅Opened()事件)。
然后在ToolStripMenuItem关闭时,将字段引用设置回null

示例
ContextMenuStrip 是通用名称,必须将其设置为实际的控件名称。)

toolStripMenuItem