隐藏的WinForms模式对话框
本文关键字:对话框 模式 WinForms 隐藏 | 更新日期: 2023-09-27 18:10:42
我有一个WinForms应用程序。它有一个主表单和两个模态对话框,如下所示:
- FormMain: Run via
Application.Run(new FormMain())
. - FormSettings: launch from
FormMain:
.new FormSettings().ShowDialog(this)
. - FormCredentials: launch from
FormSettings:
new FormCredentials().ShowDialog(this)
.
当这三个表单都有正常的边框和大小时,一切都很好。然而,这个应用程序应该全屏显示,我只在FormMain
上使用以下代码来实现这一点:
FormMain.FormBorderStyle = FormBorderStyle.FixedSingle;
FormMain.MinimizeBox = false;
FormMain.MaximizeBox = false;
FormMain.Text = "";
FormMain.ControlBox = false;
FormMain.ShowInTaskbar = false;
FormMain.TopMost = !Configuration.Debug;
FormMain.TopLevel = true;
其他两个对话框有它们的FormBorderStyle = FormBorderStyle.FixedSingle
。
所以FormMain
启动FormSettings
作为模态对话框,FormSettings
启动FormCredentials
作为模态对话框。FormCredentials
总是消失在FormMain
后面。事实上,任何三级形式在FormMain
之后都消失了。
搜索此行为提出了指定表单所有者的建议,我已经在调用ShowDialog(this)
中这样做了。
还有其他原因导致它这样做吗?
EDIT:这只发生在发布模式下,所以FormMain.TopMost = !Configuration.Debug
行可能与它有关。这一行可以确保终端用户在应用程序作为kiosk运行时无法退出。
请检查这个url的TopMost属性-你不需要设置任何东西,注释掉这行设置TopMost属性,并检查,正常情况下它应该工作良好。
https://msdn.microsoft.com/en-us/library/system.windows.forms.form.topmost (v = vs.110) . aspx
编辑:TopMost表单的描述:
顶层表单是与所有其他(非顶层)表单重叠的表单,即使它不是活动表单或前景表单。最顶层的窗体总是显示在桌面上窗口z轴顺序的最高点。您可以使用此属性创建始终显示在应用程序中的表单,例如查找和替换工具窗口。