强制表格保持在最顶层

时间:2013-03-21 14:42:10

标签: c# .net winforms devexpress

我想要一个表单在每次打开时显示模态。因为我无法改变它的创建和打开方式。我想知道是否有可能使表单在表单类中保持最佳状态。

一个机会是TopMost属性。这通常是有效的,但如果我在主线程等待它关闭时显示表单,即使我更改了应用程序(例如浏览器),表单也会保持在顶部。所以无论我在哪里,表格仍然会显示出来。

我遇到的另一个问题是,在某些情况下,它会被父表单采用,然后可能会阻止其他窗口或弹出消息。

我想到了OnLostFocus事件的一个钩子,一旦失去焦点,再次将它放在首位,但我不确定这是不是一个好主意......

有关它的任何有用的想法?


修改

由于评论,我将扩展我的描述,这是真正的用例

我们正在使用Devexpress的SplashScreenManager,它能够将某种形式显示为WaitForm。由于WaitForm不打算以模态(see on the Support Center)显示,因此我们正在寻找一种方法。

我们无法更改表单的显示方式,因为这是通过SplashScreenManager完成的。 WaitForm既显示在主线程中,也显示在某个后台工作者中。

所以这只是我们自己的形式,在我们自己的应用程序中显示它。

2 个答案:

答案 0 :(得分:1)

使用:

TopLevel = true;

这将完全符合您的要求;只要显示主窗体,它就是最顶层,如果主窗体被另一个窗口隐藏,则隐藏。

您可以明确地将初始表单的所有者设置为主表单,而无需使用.Show(所有者)。

splashForm.Owner=mainForm;
splashManager.Show(splashForm);

答案 1 :(得分:0)

我们不想要TopMost属性,因为它在Windows级别上运行并且也覆盖其他窗口(例如浏览器)。 最后,我联系了窗口的焦点事件,以确保窗口始终位于顶部。