1

我在 ac# 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,但都未能防止突然隐藏。

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

谢谢。

4

1 回答 1

1

你隐藏你的表格太快了。有那么一会儿,您的应用程序没有可以包含焦点的窗口。这迫使 Windows 去寻找另一个窗口来给予焦点,它会从另一个应用程序中选择一个。该窗口现在将成为前景窗口,您的第二个窗体将不会获得焦点并在 Z 顺序中显示较低。修复很简单:

void button1_Click(object sender, EventArgs e)
{           
    form2 = new form2();
    form2.Show();
    form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);               
    this.Hide();  // Moved
}
于 2009-11-15T23:32:42.657 回答