我正在使用一个与Windows窗体应用.NET 3.5相关的计时器。我设置了一个定时器,如果在一定时间内没有任何操作,当前的窗体将会被关闭,并且用户会返回到默认的“未登录”窗体。该窗体显示某些信息,但不允许访问其他窗体。
Application.OpenForms给了我一个列表,可以关闭大多数可能还开着的窗体,但是Application.OpenForms似乎只知道MDI窗体。其中一些MDI窗体可能有MessageBox或其他模态窗体。甚至有可能模态窗体本身也有弹出对话框。
我知道Application.OpenForms中存在缺陷(bug),但我不认为在创建Messagebox或其他类似窗体之后仍会修改属性。无论如何,这些问题只会影响那些窗体,其他所有窗体都应该列在ApplicationOpenForms中。
是否有一种简洁的方法来迭代并关闭应用程序中的每个类型的窗体,除了我关心的那一个? (或者严格来说,关闭除了MDI父窗体之外的所有窗体,然后打开我关心的那一个)。
Application.OpenForms给了我一个列表,可以关闭大多数可能还开着的窗体,但是Application.OpenForms似乎只知道MDI窗体。其中一些MDI窗体可能有MessageBox或其他模态窗体。甚至有可能模态窗体本身也有弹出对话框。
我知道Application.OpenForms中存在缺陷(bug),但我不认为在创建Messagebox或其他类似窗体之后仍会修改属性。无论如何,这些问题只会影响那些窗体,其他所有窗体都应该列在ApplicationOpenForms中。
是否有一种简洁的方法来迭代并关闭应用程序中的每个类型的窗体,除了我关心的那一个? (或者严格来说,关闭除了MDI父窗体之外的所有窗体,然后打开我关心的那一个)。
foreach
循环会很好。 - BrianMessageBox
窗口(即MessageBox.Show
)时。模态窗体通常很棘手,因为你不能简单地关闭它们。你必须模拟按下“取消”按钮,并以正确的顺序处理模态窗体。准备花费大量时间解决这个问题。 - Jim Mischel