我想要一个表单在每次打开时显示模态。因为我无法改变它的创建和打开方式。我想知道是否有可能使表单在表单类中保持最佳状态。
一个机会是TopMost
属性。这通常是有效的,但如果我在主线程等待它关闭时显示表单,即使我更改了应用程序(例如浏览器),表单也会保持在顶部。所以无论我在哪里,表格仍然会显示出来。
我遇到的另一个问题是,在某些情况下,它会被父表单采用,然后可能会阻止其他窗口或弹出消息。
我想到了OnLostFocus
事件的一个钩子,一旦失去焦点,再次将它放在首位,但我不确定这是不是一个好主意......
有关它的任何有用的想法?
修改
由于评论,我将扩展我的描述,这是真正的用例
我们正在使用Devexpress的SplashScreenManager
,它能够将某种形式显示为WaitForm
。由于WaitForm
不打算以模态(see on the Support Center)显示,因此我们正在寻找一种方法。
我们无法更改表单的显示方式,因为这是通过SplashScreenManager
完成的。 WaitForm
既显示在主线程中,也显示在某个后台工作者中。
所以这只是我们自己的形式,在我们自己的应用程序中显示它。
答案 0 :(得分:1)
使用:
TopLevel = true;
这将完全符合您的要求;只要显示主窗体,它就是最顶层,如果主窗体被另一个窗口隐藏,则隐藏。
您可以明确地将初始表单的所有者设置为主表单,而无需使用.Show(所有者)。
splashForm.Owner=mainForm;
splashManager.Show(splashForm);
答案 1 :(得分:0)
我们不想要TopMost属性,因为它在Windows级别上运行并且也覆盖其他窗口(例如浏览器)。 最后,我联系了窗口的焦点事件,以确保窗口始终位于顶部。