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

时间:2011-01-26 18:59:56

标签: c# .net winforms

我在Winforms App中有两个表单类(Form1和Form2)。

Form1是这样的:

Form1 with a button on it

Form2是这样的(ShowInTaskbar = false):

Form2 with an OK and Cancel buttons

这个代码在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.");
    }

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

我需要:

  1. 用户一次只能使用一个窗口。 (模态形式,这就是我使用ShowDialog()而不是Show())
  2. 的原因
  3. 当表单关闭时,根据表单的关闭方式做一些事情(“if(someForm.ShowDialog(this)...”)
  4. 能够(作为用户)最小化整个APP。
  5. 能够将应用程序“最小化”到前一状态。
  6. 响应WIN + M(最小化所有)键组合的程序。
  7. 以上示例以两种方式失败:

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

      Empty desktop with the app running

      在: Empty desktop with the Form2 (someForm) minimized

      注意:

      1. 主窗体未最小化
      2. Form2位于屏幕的左下角。
      3. Form2是一个完整的窗口(本身不是一个对话框窗口),我需要用户与它进行交互,直到它关闭,我还需要用户能够在需要时将整个应用程序分解为miminize

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

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

2 个答案:

答案 0 :(得分:1)

我可能需要更多关于您在这里尝试做什么的信息。我有一个简单的表单(Form1),上面有一个按钮,调用此代码:

  private void button1_Click(object sender, EventArgs e)
  {
     Form1 form2 = new Form1();
     form2.ShowDialog();
  }

当我点击按钮时,我得到了同一个表单的第二个实例,但它是模态的。我仍然可以选择最小化第二个模态形式(我显然不能与第一个形式交互),当我最小化第二个形式时,它确实最小化了整个应用程序(两种形式)。现在显然你在问这个问题,所以我不认为我理解你。 =)你希望改变这种情况怎么样?

  • C

答案 1 :(得分:0)

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