隐藏的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运行时无法退出。

隐藏的WinForms模式对话框

请检查这个url的TopMost属性-你不需要设置任何东西,注释掉这行设置TopMost属性,并检查,正常情况下它应该工作良好。

https://msdn.microsoft.com/en-us/library/system.windows.forms.form.topmost (v = vs.110) . aspx

编辑:TopMost表单的描述:

顶层表单是与所有其他(非顶层)表单重叠的表单,即使它不是活动表单或前景表单。最顶层的窗体总是显示在桌面上窗口z轴顺序的最高点。您可以使用此属性创建始终显示在应用程序中的表单,例如查找和替换工具窗口。