2011-10-23 36 views
1

如何多次打開表格?我有這樣的事件:如何多次打開和關閉表格

Form2 myForm = new Form2(); 

private void button_Click(object sender, EventArgs e) 
{ 
    myForm.Show(); 
} 

當調試我與2008年的VisualStudio,我第一次在按鈕上點擊項目,在形式表現爲,但是當我關閉它,我試圖再次打開它,我得到類似如下的錯誤:不可能訪問被清除的對象。對象名稱:'Form2'。

任何人都可以向我解釋這種行爲?

+1

如果你想重新打開你的表格,你最好只隱藏它。 – UrbanEsc

回答

3

您還可以覆蓋Form2Closing事件,其中斷並改用Hide()方法。這樣,每次想要顯示窗口時都不必創建新實例。

編輯:上Stackoveflow說明該方法的問題
Here's例子。你所要做的,就是創建窗體2類的原始實例時,掛鉤到它的關閉事件中加入以下代碼到窗體2類:

private void Form2_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     Hide(); 
     e.Cancel = true; 
    } 

而這一切。您不必更改您的處理程序。

+1

爲什麼不調用'Hide()'直接改爲? – UrbanEsc

+0

@UrbanEsc:OP從未指定他如何關閉「Form2」 - 因爲有多種方式可以這樣做,所以最好在一個點處理關閉。但是當然,你可以直接調用'Hide()' - 這只是更多的場景。 –

1

你在哪裏創建Form2

你可以有你的當前形式的本地視野持有對它的引用,是這樣的:

private Form2 myForm2; 

然後當你要顯示它您可以這樣做:

if(myForm2 == null) 
{ 
    myForm2 = new Form2(); 
} 

myForm2.Show(); 

將第二個片段放在Button_Click事件中,並將Form1類中的第一個放在任何方法之外。它應該工作。

+0

我在任何方法外部的Form1類上創建了Form2,並將第二個片段放在Button_Click事件中,但它不起作用...我有同樣的錯誤... – user973511

2

當你關閉你的表單它的配置(也不可能再次顯示),你應該(在你的按鈕處理事件)創建新實例:

Form f = new Form(); 
f.Show();