.NET 中的全局 FormClosing/Load 事件

Global FormClosing/Load events in .NET

提问人:Scott 提问时间:8/12/2022 更新时间:8/12/2022 访问量:50

问:

我正在使用 VB.NET 4.7.2

我有一个多表单应用程序,我正在对顶部的“窗口”菜单进行编码以显示打开的表单,以便用户可以轻松切换(现在 Win11 已强制在任务栏上组合应用程序)。

我需要每个打开的窗体能够处理其他窗体生成的 FormOpening 和 Load 事件。我当前的解决方案是在每个表单中本地处理这些事件,然后触发任何其他表单都可以处理的自定义全局事件。

但这有点乏味 - 如果没有这种解决方法,一个表单是否可以处理另一个表单的关闭或打开?

vb.net 事件 全局 表单关闭

评论

0赞 Jimi 8/12/2022
我需要每个打开的窗体能够处理其他窗体生成的 FormOpening 和 Load 事件:为什么?这与我正在编写“窗口”菜单有什么关系?
0赞 Scott 8/12/2022
“窗口”菜单显示当前打开的所有窗体。因此,为了保持更新,它需要知道其他表单何时打开或关闭
0赞 Scott 8/12/2022
你的评论让我觉得我不需要捕捉表格的打开和关闭。相反,我决定创建一个自定义的 ToolStripMenuItem 类,该类仅在 OnDropDownShow 触发时刷新打开的窗口
0赞 Jimi 8/12/2022
当 Menustrip 设置为 ToolStripMenuItem(容器是 MDI 窗体)时,可以执行 (给予或接受) 的操作:循环集合,并在打开时为每个集合添加一个 ToolStripMenuItem,在关闭时删除所有集合。选择列出窗体的子菜单时,调用该窗体的方法。MdiWindowListItemApplication.OpenFormsBringToFront()

答:

2赞 Steve Todd 8/12/2022 #1

您可以子类化一个标准表单,以完成向共享全局注册和挂钩其他表单事件的所有工作。然后,您只需要更改表单标题以指向子类类型即可。