2013-10-22 39 views
2

問題:我已經創建了一個有兩種形式的程序。當在Form1上按下一個按鈕時,程序「隱藏」Form1並「顯示」Form2。問題是,當我關閉Form2時,程序繼續在後臺運行,我相信這是因爲程序需要關閉Form1,而不是爲了程序結束而隱藏。如何關閉C#程序中,從第二形態(不隱藏)C#多種實現形式問題

我的問題是我怎麼重寫第二種形式來關閉程序並不能掩蓋?

private void btnCreate_Click(object sender, EventArgs e) 
    { 
     Form2.Show(); 
     Form1.Hide(); 
    } 

我知道我可以從Form2再次顯示Form1,然後關閉,但我真的很想避免這種情況。

+1

()',而不是'Form1.Hide()'或'調用Application.Exit()''時Form2'已經關閉(我不知道你的應用程序是如何製造,收盤' Form1'甚至可能退出應用程序)。 –

+0

您可能想閱讀http://stackoverflow.com/a/11504844/1588471 可能是解決您的問題。 – stckvflw

+0

@Adriano這將無法正常工作。當_「main」_窗口關閉時,應用程序將終止。 –

回答

3

可以使用FormClosed事件:

private void btnCreate_Click(object sender, EventArgs e) 
    { 
     Form2.Show(); 
     Form2.FormClosed += new FormClosedEventHandler(form2_FormClosed); 
     Form1.Hide(); 
    } 

    void Form2_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     Form1.Close(); 
    } 
4

你有幾個選項來做到這一點,根據你的應用如何。

第一個直觀的解決方案是撥打Close(),而不是Hide()撥打Form1。只有在您的應用程序的Form1不是主要形式(主消息循環中的一個以Application.Run()開始)時纔有效。

第二種解決方案是添加事件處理程序FormClosed事件的Form2,並關閉第一種形式,當第二個被關閉:

private void btnCreate_Click(object sender, EventArgs e) 
{ 
    Form2.Show(); 
    Form2.FormClosed += new FormClosedEventHandler(delegate { Close(); }); 
    Form1.Hide(); 
} 

您可以直接關閉Form1或致電Application.Exit()(如果你沒有打開多個表單你想關閉在一起)。

最後的解決方案是讓第二表格第一位的所有者

private void btnCreate_Click(object sender, EventArgs e) 
{ 
    Form2.Show(); 
    Form1.Owner = Form2; 
    Form1.Hide(); 
} 

當所有者關閉這將自動關閉所有的形式。這是我更喜歡的解決方案,但它只適用於一種形式(一個擁有者只能擁有一種形式)。

+0

好的答案,thanx! – Csati

0

在應用開發特別是對的WinForms爲用戶着想,總是有一種主要形式(無論是的MdiParent或單親),將永遠是主要的形式,所有其他形式的表演。

給予回答的問題將鼓勵不好的編程習慣。

讓MainForm的接近和應用程序將結束。隱藏form1不會結束應用程序。使用`Form1.Close

+0

我嘗試了不同的選擇,你的工作很好。 – umlcat