C# 当至少打开一个模式窗口时,如何最小化winforms应用程序

C# 当至少打开一个模式窗口时,如何最小化winforms应用程序,c#,.net,winforms,C#,.net,Winforms,我在Winforms应用程序中有两个表单类(Form1和Form2) 表格1是这样的: 表单2如下所示(ShowInTaskbar=false): 表1中的代码: Form2 someForm = new Form2(); private void btOpenAnotherWindow_Click(object sender, EventArgs e) { if (someForm.ShowDialog(this) == DialogResult.O

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

表格1是这样的:

表单2如下所示(ShowInTaskbar=false):

表1中的代码:

    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()调用表示)

我需要:

  • 用户一次只能使用一个窗口。(模态形式,这就是为什么我使用ShowDialog()而不是Show())
  • 当窗体关闭时,根据窗体关闭的方式执行某些操作(“if(someForm.ShowDialog(this)…”)
  • 能够(作为用户)最小化整个应用程序
  • 能够将应用程序“取消动画化”为前一种状态
  • 该程序响应WIN+M(最小化所有)键组合
  • 上述示例在两个方面失败:

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

    之后:

    注:

  • 主窗体不是最小化的
  • 表格2位于屏幕的左下角
  • Form2是一个完整的窗口(不是一个对话框窗口本身),我需要用户只与它交互,直到它关闭,我还需要用户能够模仿整个应用程序,以防他需要它

    很遗憾,我不能在这里发布真实的表单,它比这些模型更清晰


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

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

    我可能需要更多关于您在这里尝试执行的操作的信息。我有一个简单的表单(Form1),上面有一个按钮,它调用以下代码:

      private void button1_Click(object sender, EventArgs e)
      {
         Form1 form2 = new Form1();
         form2.ShowDialog();
      }
    
    当我点击按钮时,我得到了相同表单的第二个实例,但它是模态的。我仍然可以选择最小化第二个模态表单(我显然不能与第一个表单交互),当我最小化第二个表单时,它会最小化整个应用程序(两个表单).现在很明显,你在问这个问题,所以我不认为我理解你。=)你希望改变这种情况吗

    • C

    当我最小化第二个(模式)窗口时,应用程序的主窗体仍然冻结,无法最小化,因此无法访问桌面。用户需要的是一种最小化应用程序主窗体的方法,即使其中有打开的模式窗口,这样她可以暂时在其他应用程序中做一些其他事情,甚至与桌面交互。Yanko-我无法重复您的问题=(您使用的是什么操作系统?您运行的是什么版本的.NET Framework?您好。我的开发环境运行在带有.NET Framework 3.5 SP1和VS.NET 2008的Windows XP Pro SP3上。我也在Windows Vista系统中测试了该应用程序,得到了相同的结果。顺便说一句,谢谢您和所有参加测试的人。)让我回答我的帖子。Yanko-没问题,很抱歉你还没有度过这个难关!你能尝试在VS2008中创建一个新项目并使用我上面发布的代码吗?只需在默认窗体上放置一个按钮,并将代码放入单击事件中。我在VS2010和VS2008中尝试过,但没有问题。我正在运行Windows 7…这发生在XP、Vi中sta和7。请注意,当有许多打开的窗口时,应用程序似乎被最小化,但实际上并非如此。只有当您尝试查看桌面时,您才会看到问题。我发布了一些显示问题的图片。我可以禁用整个窗口(this.enable=false),并使用Show而不是ShowDialog,但这不会对整个窗口造成任何影响“最小化所有打开的窗口”问题。