【发布时间】:2013-03-21 14:42:09
【问题描述】:
我希望表单在每次打开时都显示为模态。因为我不能改变它的创建和打开方式。我想知道是否有可能使表单在表单类中保持在顶部。
一个机会是TopMost 属性。这通常有效,但如果我在主线程等待它关闭时显示表单,即使我更改应用程序(例如更改为浏览器),表单也会保持在顶部。所以无论我在哪里,表格仍然显示。
我遇到的另一个问题是,在某些情况下,它被父表单采用,然后可能会阻止其他窗口或弹出消息。
我正在考虑使用OnLostFocus 事件的挂钩,以便在失去焦点后再次将其置于首位,但我不确定这是否是个好主意...
有什么有用的想法吗?
编辑
由于 cmets,我将扩展我的描述,这是真正的用例
我们正在使用 Devexpress 的 SplashScreenManager,它能够将某种形式显示为 WaitForm。由于WaitForm 不打算显示为模态(see on the Support Center),因此我们正在寻找一种方法来做到这一点。
我们无法更改表单的显示方式,因为这是通过SplashScreenManager 完成的。 WaitForm 既来自主线程,也来自某些后台工作线程。
所以这只是关于我们自己的一种形式,在我们自己的应用程序中显示它。
【问题讨论】:
-
如果有另一个应用程序采用相同的逻辑怎么办?没用。
-
@LarsTech 我用更多细节更新了我的问题。
-
您只需进行两次更改即可将任何非模态表单变为模态。首先使它成为一个 owned 窗口,所以它总是在另一个窗口的顶部。 Show(owner) 重载就是这样做的。其次,通过将其 Enabled 属性设置为 false 来防止输入到其他窗口。确保在关闭“对话框”窗口之前重新启用它们。
-
@HansPassant 感谢您的评论。我没有真正理解你的第一部分。我无法影响表单的显示方式,它由
SplashScreenManager调用,所以我不能自己调用Show(owner) -
你可能会觉得this很有趣
标签: c# .net winforms devexpress