2009-11-15 24 views
1

我遇到了c#3.5应用程序窗体上的奇怪行为。点击按钮后,我的form1隐藏自身,创建一个新的form2,并显示form2。 Form1还包含form2关闭时触发的事件方法。这里的内部Form1的代码:C#窗体问题:失去控制权和随机隐藏的新窗体

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(); 
    } 

现在,我的问题是,有时当我打开窗口2(隐藏Form1中),或者当我关闭窗口2(显示Form1中),新的形式会在屏幕的上眨眼然后隐藏自己。它仍然是开放的,我可以从任务栏点击它再次显示,但窗口本身发送到任何其他打开的窗口后面。它看起来像打开了,但立即最小化。

此行为是随机发生的。有时候表格会被打开并隐藏起来没有问题,但有时他们会失去对另一个窗口的关注。我尝试过使用focus(),activate()和最顶层,但都未能阻止突然隐藏。

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

谢谢。

+0

为什么你新建form2()?不应该是form2 = new Form(); – Soviut 2009-11-15 22:13:00

+0

@Soviut - 写这个问题时可能只是一个错字 – ChrisF 2009-11-15 22:21:50

+0

你可以用ShowDialog()来试试吗? – Stormenet 2009-11-15 22:21:57

回答

1

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

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

谢谢你,欣赏它 – Endo 2009-11-16 00:00:24

+0

我有类似的问题。但不同的是“我使用showDialog而不是显示” – Sami 2012-09-05 11:50:50