Winforms:有没有办法在我的应用程序中打开表单时得到通知?

我的主窗体上有一个“切换到窗口”按钮,我希望仅在其他窗口(在我的应用程序中)打开时启用。 每当打开或关闭表单时,我的主表单可以挂钩,是否会出现某种事件? (例如,也许某种方式来跟踪Application.OpenForms何时发生了变化?)

(我知道如果此function在菜单项中,我可以在单击菜单时执行Application.OpenForms检查,但此按钮不在菜单中。)

您可以使用MessageFilter并监视WM_SHOWWINDOW和WM_CLOSE消息。

您可以定义自己的类型FooForm ,它inheritance自Form 。 在FooForm的构造函数中,触发一个静态定义的FormOpened事件。

然后,所有表单都将具有基本类型FooForm而不是Form 。 每次打开一个表单时都会触发该事件。

我最终构建了一个窗口管理器类,当创建一个新窗体时,它将自己添加到Window Manager的集合中。 您可以将此function封装在基本Form类中,这样您就不必记住这样做。 然后,您可以在窗口管理器类中创建事件,以通知您这样的事情。 您还可以查询经理类中的窗口集合。 然后我使用这个类来将构建打开窗口菜单的function整合到实用程序类中。