2009-11-15 28 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