C#表单问题:新表单失去控制并随意隐藏

时间:2009-11-15 22:09:52

标签: c# forms controls hide show

我在c#3.5应用程序上遇到表单的奇怪行为。单击按钮,我的form1隐藏自己,创建一个新的form2,并显示form2。 Form1还包含form2关闭时触发的事件方法。这是Form1中的代码:

Form2 form2;

void button1_Click(object sender, EventArgs e)
    {           
        this.Hide();
        form2 = new form2();
        form2.Show();
        form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);               
    }

void form2_FormClosed(object sender, FormClosedEventArgs e)
    {
        form2.Dispose();
        form2 = null; 
        this.Show();  
    }

现在,我的问题是,有时当我打开form2(隐藏form1),或者当我关闭form2(显示form1)时,新表单将出现在屏幕上闪烁然后隐藏自己。它仍然是打开的,我可以从任务栏单击它再次显示它,但窗口本身是在任何其他打开的窗口后面发送的。它看起来像打开但立即最小化。

此行为是随机发生的。有时形式会打开并隐藏而没有问题,但有时它们会失去对另一个窗口的关注。我尝试过使用focus(),activate()和topmost,但都无法防止突然隐藏。

有谁知道为什么会发生这种情况以及如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:1)

您过早隐藏表单。暂时,您的应用没有可以包含焦点的窗口。这迫使Windows寻找另一个窗口以获得焦点,它将从另一个应用程序中选择一个。该窗口现在将成为前景窗口,您的第二个窗体将无法获得焦点并在Z顺序中显示为较低。修复很简单:

void button1_Click(object sender, EventArgs e)
{           
    form2 = new form2();
    form2.Show();
    form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);               
    this.Hide();  // Moved
}