我有一个包含多个表单的大型应用程序,其中任何一个都可以获得一个模态的MessageBox
(MessageBox.Show()
)并锁定表单。
在激活其他表单时,我现在需要找到此MessageBox
并将包含此MessageBox
的表单放在前面。有没有办法检查这个?
我知道Application.OpenForms
属性,也许MessageBox
有这样的内容?
Edit1:例如,假设我们打开Winform1,然后Winform1中的事件将转到打开Winform2的mainController。 Lateron Winform1正在获得一个MessageBox.Show,但它完全有可能将Winform2带到前面(在Winform1之上)。所以现在我需要对Winform.Activated做出反应以检查是否有任何MessageBox.Show,如果是这样,请将此表单保存到MessageBox前面。
答案 0 :(得分:1)
你可以通过这样的方式找到它们:
foreach (Form f in Application.OpenForms)
{
if (f.Visible && ! f.CanFocus)
{
// whatever...
}
}
道歉,如果语法错误,我做Boo而不是C#...
编辑:完全不同的方法怎么样?
让所有表单处理Application.EnterThreadModal和Application.LeaveThreadModal,这样当应用程序在该表单为当前模式时,您将该表单添加到列表中,以便跟踪它,并将其从列表中删除当它离开模态...然后您需要做的就是查询该列表以查看是否有任何表单打开了模式对话框。
答案 1 :(得分:0)
尝试使用带有所有者的Show
方法之一:
MessageBox.Show(this, "My Message");
我在.NET 4 / Windows 7上对此进行了测试,当消息框打开时,它会将其所有者带到前面。