2011-01-24 83 views
4

我有兩種形式;一個叫做'贏',另一個叫'失'。 「贏」表單上有一個按鈕,顯示「損失」表單。點擊此按鈕時,兩種形式都可見。當我關閉了「損失」的形式,然後點擊「雙贏」窗體上的按鈕,我再次出現以下情況例外:c#winform編程

An unhandled exception has occured: Unable to access a disposed object ..object :form

請可能有人點我在正確的方向,所以我可以解決這個問題?

+1

您是否確定您每次點擊按鈕時都會創建一個窗體的新實例... – 2011-01-24 13:14:26

+0

肯定需要了解更多代碼 – 2011-01-24 13:22:23

+0

您想實現什麼目標? '贏'的形式應該從'損失'形式檢索一些數據? – 2011-01-24 13:39:36

回答

1

在引用它之前,您可以驗證表單的IsDisposed屬性。

E.g.關於「雙贏」的形式按鈕單擊處理程序:

if (loss.IsDisposed) 
    return; 

// do stuff with loss form 

更新:我認爲這是最好不要共享形式之間的控制。

  1. 您可以運行'丟失'形式作爲對話框。在對話框關閉後讀取所有需要的屬性。
  2. 您可以訂閱「損失」表單事件並以「贏」形式處理它們。
4

這是因爲你的'損失'表已經關閉並且已經處理完畢,所以不能再使用了。您需要創建窗體的新實例,像這樣(不知道你的代碼究竟是如何看起來):

this.loss = new LossForm(); 
this.loss.Show(); 
0

這不是你要一個很好的模式,但你可以掛接到的FormClosing事件,取消它,然後隱藏表單。這意味着表單不會自動處理,您可以再次致電演出。

把時間放在一邊研究MVC架構 - 起初看起來很複雜,但它確實有幫助。