2016-08-30 172 views
1

我想表明一種叫做TTT所以我嘗試這樣的:C#中打開窗體並關閉它

public static TTT ttt_local = new TTT(); 

private void button1_Click(object sender, EventArgs e) 
{ 
    ttt_local.Show(); 
} 

然後我想從裏面關的形式,以便ttt_local自行關閉時ttt_local按下按鈕。這有效,但如果我想重新打開ttt_local我得到ObjectDisposedException。有人能幫助我嗎?

+0

'ttt_local.Dispose();' –

+0

顯示如何關閉窗體。我想你需要的是**隱藏**的形式,而不是**閉幕**。 – HimBromBeere

+0

永遠不要寫這樣的代碼,一個Form對象是一次性的。一旦關閉,它就不再可用。並嘗試再次使用它會產生ODE。在需要時創建對象。如果您想強制執行單實例行爲,請訂閱FormClosed事件以將ttt_local變量設置爲null。 –

回答

1

你不應該需要讓一個形式接近本身,但是你可以設置它的知名度或者乾脆隱藏它(同樣也適用於顯示形式):

消費者代碼:

var ttt = new TTT(); 
ttt.Show(); 

TTT個-class:

public class TTT : Form 
{  
    private void button2_Click(object sender, EventArgs e) 
    { 
     this.Hide(); 
    } 
} 

現在你消費者代碼,而不是形式,類本身內再次撥打ttt.Show()

或者,您可以使用Form.Visibility設置表單的可見性。

0

你有兩種選擇。

  1. 使用實例變量而不是類變量,讓事情按照現在的方式工作。
  2. 不要處理表格,只能與Show/Hide選項一起生活。

選項1:

public TTT ttt_local = new TTT(); 

private void button1_Click(object sender, EventArgs e) 
{ 
    if(ttt_local == null) ttt_local = new TTT(); 
    ttt_local.Show(); 
} 

選項2:

不要關閉的形式,只是hide/show玩,甚至設置Visible屬性。

+0

明顯地''ttt_local'永遠不會'null',因爲您在表單的構建時設置它。這樣的檢查是沒有意義的。 – HimBromBeere

+0

我的意思是當表單關閉時,可以將其設置爲'null',以便更好地安全防護,並在實例不可用時創建實例。 –

0

使用全局變量的原因是什麼?您只應將變量定義放入事件函數中:

private void button1_Click(object sender, EventArgs e) 
{ 
    TTT ttt_local = new TTT(); 
    ttt_local.Show(); 
} 

每當觸發事件時,變量就會創建,然後通過關閉表單進行處理。

0

你可以顯示它,然後隱藏它。 ttt_local.Show(); ttt_local.Hide();

或關閉:

ttt_local.Close();

問候。

相關問題