如何在打开至少一个模态窗口时最小化winforms应用程序

Yan*_*rez 6 .net c# winforms

我在Winforms应用程序中有两个表单类(Form1和Form2).

Form1是这样的:

Form1上有一个按钮

Form2是这样的(ShowInTaskbar = false):

Form2带有

这个代码在Form1上:

    Form2 someForm = new Form2();
    private void btOpenAnotherWindow_Click(object sender, EventArgs e)
    {
        if (someForm.ShowDialog(this) == DialogResult.OK)
            MessageBox.Show("OK!!!");
        else
            MessageBox.Show("Not OK.");
    }
Run Code Online (Sandbox Code Playgroud)

也就是说,一个带有按钮的窗口,在单击时以模态方式打开另一个窗口,并等待用户关闭第二个窗口(通过单击"确定"或"取消"按钮).并根据它是如何关闭的,执行交替操作(此处由MessageBox.Show()调用表示).

我需要:

  1. 用户一次只能使用一个窗口.(模态形式,这就是我使用ShowDialog()而不是Show()的原因)
  2. 当表单关闭时,根据表单的关闭方式做一些事情("if(someForm.ShowDialog(this)...")
  3. 能够(作为用户)最小化整个APP.
  4. 能够正确地将应用程序"最小化"到前一状态.
  5. 该程序响应WIN + M(最小化所有)键组合.

以上示例以两种方式失败:

  1. (需要5)不响应WIN + M
  2. (需要3)应用程序似乎被点击最小化的标题栏按钮时最小化,但它是一种错觉,因为主窗体(Form)不会减少,它其实只是被隐藏了其他打开的窗口后面.只运行带有空桌面的示例才能显示实际发生的情况.照片如下:

单击最小化按钮之前:

应用程序运行的空桌面

后: 使用Form2(someForm)的空桌面最小化

注意:

  1. 主窗体未最小化
  2. Form2位于屏幕的左下角.

Form2是一个完整的窗口(本身不是一个对话框窗口),我需要用户与它进行交互,直到它关闭,我还需要用户能够在需要时将整个应用程序缩小.

遗憾的是我无法在这里发布真实的形式,这将比这些模型更清晰.

我需要一个适用于多级模态窗口的解决方案(不仅如本例所示,还有两个).有什么建议?

Max*_*ing 0

可能有某种方法可以使用 API 调用来破解此功能,但我可能建议使用主窗体内的控件而不是实际的窗口进行某种类型的覆盖。这将允许您将其设置为“模态”,并且仍然能够最小化/调整主窗口的大小。