【发布时间】:2020-03-03 17:21:16
【问题描述】:
我有一个包含多个表单的大型应用程序,它们中的任何一个都可以获得一个模态的 MessageBox (MessageBox.Show()) 并锁定表单。
在激活另一个表单时,我现在需要找到此 MessageBox 并将包含此 MessageBox 的表单放在前面。有什么方法可以检查吗?
我知道Application.OpenForms 属性,也许MessageBox 有类似的东西?
Edit1 : 比如我们打开 Winform1,那么 Winform1 中的一个事件会去打开 Winform2 的 mainController。后来 Winform1 得到了一个 MessageBox.Show,但它完全有可能将 Winform2 带到前面(在 Winform1 之上)。所以现在我需要对 Winform.Activated 做出反应,检查是否有任何 MessageBox.Show,如果有,请将这个保存 MessageBox 的表单放在前面。
【问题讨论】:
-
我很困惑。如果消息框是模态且打开的,则不应打开或激活其他表单...
-
@MerlynMorgan-Graham:第一个锁定的表单肯定不是从他的应用程序中打开表单的唯一方法。
-
@Otiel:除非在后台弹出表单,否则应该锁定所有表单,因此无法弹出表单以响应用户。我以为这就是 modal 的意思——所有表单都被锁定了。
-
@MerlynMorgan-Graham:不一定。例如,如果从系统托盘菜单打开表单,则从表单打开
MessageBox不会阻止打开另一个表单。不过,“将包含此 MessageBox 的表单放在前面”肯定是不可能的。 -
您可能能够找到活动表单的父表单(拥有消息框的表单),并将新表单设置为该表单后面的 z 顺序。不知道这是多么痛苦,或者有多大可能。