2013-11-28 34 views
0

我想產生一個無模式對話框,每當我關閉對話框,並要打開它再次我收到一個錯誤說越來越System.ObjectDisposedException:無法訪問已釋放object.Modeless對話框在C#

System.ObjectDisposedException: Cannot access a disposed object. 
Object name: 'TransactionHistoryDialog'. 
    at System.Windows.Forms.Control.CreateHandle() 

這是我在每當transactionHistory按鈕被點擊我的主要形式,創建無模式對話框

public partial class TransactionHistoryDialog : Form 
{ 
    private static TransactionHistoryDialog instance; 

    private TransactionHistoryDialog() 
    { 
     InitializeComponent(); 
    } 

    public static TransactionHistoryDialog CreateForm() 
    { 
     if (instance == null) 
     { 
      instance = new TransactionHistoryDialog(); 
     } 

     return instance; 
    } 

    private void TransactionHistoryDialog_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     instance = null;   
    } 

    private void buttonClose_Click(object sender, EventArgs e) 
    { 
     instance = null; 

    } 


    private void buttonTransactionHistoryClose_Click(object sender, EventArgs e) 
    { 
     this.Dispose(); 
    } 


} 

然後代碼交易的對話框顯示出來:這裏是我的點擊交易按鈕

的事件代碼3210
private void buttonTransferHistory_Click(object sender, EventArgs e) 
    { 
     TransactionHistoryDialog transactionHistory = TransactionHistoryDialog.CreateForm(); 
     transactionHistory.updateTextBox(); 
     transactionHistory.Show();  

    } 

我搜索了很多,但找不到問題所在。任何人都可以給我一些提示嗎?

+0

你爲什麼要調用'this.Dispose();'?你不需要這樣做來關閉表單。 – Szymon

回答

0

因爲關閉窗口會處理它。您需要在關閉之後創建一個新窗口,關閉後無法顯示同一個窗口。如果你想顯示相同的一個不要關閉它,並在一個處理程序集可見性隱藏,而不是添加另一種方法,例如, UnHide(),當想要再次顯示相同的實例時,將其設置爲可見。

我寧願只是創造一個新問題:

TransactionHistoryDialog openTransactionHistoryDialog; 
private void buttonTransferHistory_Click(object sender, EventArgs e) 
{ 
    if(openTransactionHistoryDialog == null) 
    { 
     openTransactionHistoryDialog = new TransactionHistoryDialog(); 
     openTransactionHistoryDialog.updateTextBox(); 
     openTransactionHistoryDialog.Closed += OnTransactionHistoryDialogClosed; 
    } 
    openTransactionHistoryDialog.Show(); 
} 

private void OnTransactionHistoryDialogClosed(object sender, EventArgs e) 
{ 
    openTransactionHistoryDialog = null; 
} 

UPDATE:有在本頁面底部的無模式對話框的「官方」的例子:http://msdn.microsoft.com/en-us/library/aa969773(v=vs.110).aspx

+0

嗨,我刪除它,但它仍然有相同的問題 – user2730833

+0

我不明白你的代碼,沒有呼叫關閉(),你如何關閉你的表單? – markmnl

+0

也是實例一個靜態變量? – markmnl

相關問題