2014-01-23 83 views
2

我有一個MDIParent,我打開了一個子窗口。如果點擊按鈕,我需要關閉當前的父項。所以我試過下面的代碼如何關閉當前窗體Winform C#

private void button_log_Click(object sender, EventArgs e) 
    { 
     MDIParent_Main obj = new MDIParent_Main(textBox_username.Text); 
      obj.Show(); 
      this.Close(); 
    } 

問題是它關閉了MDIParent_Main和子窗體。 我的錯誤在哪裏?

+0

如果'this'也是一個MdiParent,那麼這就是你的答案。你打開的表單屬於'this',所以關閉'this'關閉所有。 – DonBoitnott

+0

您遇到的問題是您的應用程序正在關閉父窗口時結束。看看這個http://stackoverflow.com/questions/40962/how-do-i-close-a-parent-form-from-child-form-in-windows-forms-2-0 – Liath

+0

@DonBoitnott,我認爲這是個好地方.Close()故意關閉父親 – Liath

回答

3

您遇到的問題是您的MDIParent表單是主要應用程序表單。當你關閉它時,應用程序結束並帶着子窗口看到this question瞭解更多細節。

一度被廣泛接受的解決方案是隱藏父表單,直到孩子也關閉。一旦孩子關門,你可以關閉父母。

// code taken from referenced question 
private void btnOpenForm_Click(object sender, EventArgs e) 
{ 
    Form2 frm2 = new Form2(); 
    frm2.FormClosed += new FormClosedEventHandler(frm2_FormClosed); 
    frm2.Show(); 
    this.Hide(); 
} 


private void frm2_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    this.Close(); 
} 
+1

感謝它的工作正常... – Happy

0

你不能這樣做。 您必須首先打開mdipather,而不是show()登錄表單,而不是關閉登錄表單時無效