我正在为一个应用程序开发一个插件,我必须注册我在我的主机应用程序中创建的任何控件,否则它们不会收到任何消息并且被有效地禁用。注册是使用控件的窗口句柄执行的。(请将此部分视为给定的,这只是我为什么需要它的背景。)
为了做到这一点,对于我创建的每个 winforms 控件,我使用它的HandleCreated
事件和HandleDestroyed
事件递归地注册/注销控件的句柄和它拥有的任何子控件。
我可以用 a 做同样的事情ContextMenuStrip
,这对于第一级项目来说很好,但是如果这些项目中有任何一个有子菜单,我不知道如何获取已打开的子菜单的句柄以便注册它。
ToolStripMenuItem
对象继承自而System.ComponentModel.Component
不是继承自System.Windows.Forms.Control
,因此它们没有.Handle
属性,也没有HandleCreated
和HandleDestroyed
事件。
请参阅图像以了解我需要处理哪个窗口(在创建时)。