2013-04-26 173 views
2

我從另一個mdi子窗體打開一個MDI子窗體並且它正在工作,但現在必須以相同的方式關閉它,並且沒有任何反應。如何從另一個MDI子窗體關閉特定的MDI子窗體子窗體

這裏是我使用的代碼示例:

private void checkbox1_CheckedChanged(object sender, EventArgs e) 
{ 

    Form1 newForm1 = new Form1(); 
    newForm1.MdiParent = this.MdiParent; 

    if (checkbox1_CheckedChanged.Checked == true) 
    { 
     newForm1.Show(); //this is working 
    } 
    else 
    { 
     newForm1.Dispose(); //this is not working. I have tryed .Close(), .Hide()... unsucessfully. 
    } 
} 

解釋:我有這個checkbox1在MDI子當它的檢查另一個MDI子(newForm1)將打開,而當它未選中此選項mdi子(newForm1)將關閉,隱藏或類似的東西。

有什麼建議嗎? 謝謝!

回答

2

你需要「找到「表單集合中的表單以便處理它:

private void checkBox1_CheckedChanged(object sender, EventArgs e) { 
    if (checkBox1.Checked) { 
    Form1 form1 = new Form1(); 
    form1.MdiParent = this.MdiParent; 
    form1.Show(); 
    } else { 
    Form found = this.MdiParent.MdiChildren.Where(x => 
       x.GetType() == typeof(Form1)).FirstOrDefault(); 
    if (found != null) { 
     found.Dispose(); 
    } 
    } 
} 

這裏假設集合中只有一個Form1表單。


另一種方式做,這是申報支票外的表單變量改變方法適用範圍:

Form1 form1; 

private void checkBox1_CheckedChanged(object sender, EventArgs e) { 
    if (checkBox1.Checked) { 
    if (form1 == null || form1.IsDisposed) { 
     form1 = new Form1(); 
     form1.MdiParent = this.MdiParent; 
     form1.Show(); 
    } 
    } else { 
    if (form1 != null) { 
     form1.Dispose(); 
    } 
    } 
} 
+0

LarsTech,我嘗試了第二種方式,它工作!編輯:我會用第一個來研究你提到的表單收集。謝謝! – Rafael 2013-04-26 13:27:19

0

在Form1中添加一個公共方法,如:

Public void closeForm() 
{ 
    Close(); 
} 

而且在你的代碼顯示,而不是

newForm1.Dispose() 

這將是:

newForm1.closeForm(); 
+0

喜Thirdy,它的怪異,我認爲您的解決方案應該工作,但什麼也沒有發生像所有我嘗試過的其他方法。但無論如何感謝。 – Rafael 2013-04-26 12:37:18

+0

老實說,我沒有試過這個只是直接從記憶和經驗寫出來,但正如你所說的@Rafael它應該工作。我打開我的筆記本電腦bcoz我現在正在使用一臺平板電腦,並在那裏嘗試。 – Edper 2013-04-26 12:51:49

+0

與OP代碼完全相同的問題。這關閉了一個從未顯示的表單。 – 2013-04-26 13:02:40

相關問題