Winforms:有没有办法在我的应用程序中打开表单时得到通知?
我的主窗体上有一个“切换到窗口”按钮,我希望仅在其他窗口(在我的应用程序中)打开时启用。 每当打开或关闭表单时,我的主表单可以挂钩,是否会出现某种事件? (例如,也许某种方式来跟踪Application.OpenForms何时发生了变化?)
(我知道如果此function在菜单项中,我可以在单击菜单时执行Application.OpenForms检查,但此按钮不在菜单中。)
您可以使用MessageFilter并监视WM_SHOWWINDOW和WM_CLOSE消息。
您可以定义自己的类型FooForm
,它inheritance自Form
。 在FooForm
的构造函数中,触发一个静态定义的FormOpened
事件。
然后,所有表单都将具有基本类型FooForm
而不是Form
。 每次打开一个表单时都会触发该事件。
我最终构建了一个窗口管理器类,当创建一个新窗体时,它将自己添加到Window Manager的集合中。 您可以将此function封装在基本Form类中,这样您就不必记住这样做。 然后,您可以在窗口管理器类中创建事件,以通知您这样的事情。 您还可以查询经理类中的窗口集合。 然后我使用这个类来将构建打开窗口菜单的function整合到实用程序类中。