【发布时间】:2019-04-15 03:00:42
【问题描述】:
我在 ContextMenuStrip 中有两个菜单项的单击事件。
我可以通过执行以下代码来获取单击的上下文菜单项的 SourceControl:
Control c = ((sender as ToolStripItem).Owner as ContextMenuStrip).SourceControl;
但是当我在另一个级别的上下文菜单项上使用此代码时,它返回 null。
如何在第二个屏幕截图的菜单项的单击事件中获取 SourceControl?
【问题讨论】:
-
在打开
ContextMenu时设置一个字段(类似于Control CurrentContextMenuOwner)可能更简单。订阅Opened()事件并设置CurrentContextMenuOwner = (sender as ContextMenuStrip).SourceControl;。在任何ToolStripMenuItems中,您都可以使用CurrentContextMenuOwner引用来访问控件的属性。在ContextMenu的Closing()或Closed()事件中将CurrentContextMenuOwner设置为null。 -
据我所知,这是
ContextMenuStrip中的一个错误,从一开始就存在。你基本上必须按照@Jimi 的建议去做。如果您愿意,您可能可以继承ContextMenuStrip并在内部进行,但如果它是一次性的,那么字段是最简单的选择。
标签: c# .net vb.net winforms contextmenustrip