在显示另一种形式的同时最小化和恢复表单

时间:2012-10-12 17:29:49

标签: c# .net winforms

我有2个表单,其中一个表单是通过单击第一个表单中的按钮来显示的。我希望它能够在单击显示第二个表单的按钮时,第一个表单最小化,第二个表单正常打开。当第二个窗体关闭时,第一个窗口应该变为未最小化并放置在之前的位置。

用户可以覆盖它,只需点击快速luanch区域中的第一个表单,如果他/她想要的话,调出第一个表单,所以我不希望第二个对话形式的对话。

我正在尝试下面的代码,但是当我点击按钮时,第一个表单最小化,第二个表单也被最小化了!所以我必须手动取消最小化第二种形式!

    private void button1_Click(object sender, EventArgs e)
    {
        if (DebugForm != null)
            return;

        DebugForm = new DebugForm();
        DebugForm.Closed += delegate
                                 {
                                     WindowState = FormWindowState.Normal;
                                     DebugForm = null;
                                 };

        WindowState = FormWindowState.Minimized;
        DebugForm.Show();
        DebugForm.WindowState = FormWindowState.Normal;
        DebugForm.BringToFront();
    }

2 个答案:

答案 0 :(得分:7)

当屏幕上有另一个窗口时,似乎可以最小化两个窗口。最小化除应用程序之外的所有窗口。你会发现它有效。保持它与其他窗口一起工作:

改变这个:

WindowState = FormWindowState.Minimized;
DebugForm.Show();
DebugForm.WindowState = FormWindowState.Normal;
DebugForm.BringToFront();

到此:

DebugForm.Show();
WindowState = FormWindowState.Minimized;

我删除的行不是必需的。重要的是语句的顺序是在最小化之前与父表单的Z顺序协调。

答案 1 :(得分:0)

陷入类似的问题。问题是我试图回拨的表单不是一个活跃的表单。这就是我解决这个问题的方法。在按钮上单击当前from2我添加:

if (form1.ActiveForm == null)// Check to see if form is active
{
    form1 frm = (form1)Application.OpenForms["form1"];// find open form
    frm.WindowState = FormWindowState.Maximized;// Set state
    frm.ShowInTaskbar = true; //set to show in taskbar
}