最近做實驗需要透過表單視窗來顯示畫面,但是關閉表單後,如果要再透過Show()方法去顯示卻會出線「無法存取已處置的物件。"」的例外,其實解決方式很簡單,我們只要先將表單隱藏起來,而不是真的關閉,然後在顯示即可。
前言
最近做實驗需要透過表單視窗來顯示畫面,但是關閉表單後,如果要再透過Show()方法去顯示卻會出線「無法存取已處置的物件。"」的例外,如下圖:
其實很簡單,我們只要先將表單隱藏起來,而不是真的關閉,然後在顯示即可。
實作方式
這邊我自己建立一個子表單叫subForm,Codebehind如下
Form subForm;
int clickCount;
public Form1()
{
InitializeComponent();
subForm = new Form();
clickCount = 1;
}
然後我的WinForm介面拉了一個Button
並且在點擊事件中去紀錄點擊的次數,並顯示在子表單的Title
private void button1_Click(object sender, EventArgs e)
{
subForm.Text = "子視窗點擊次數:" + clickCount + "次";
subForm.Show();
clickCount++;
}
但是如果只有這樣,當我們關閉子表單,再次點擊Button後會跳出此例外
所以我們需要透過Form的FormClosing事件來協助我們解決
註冊事件:
subForm.FormClosing += subForm_FormClosing;
事件處理:
先把關閉的動作取消,然後再隱藏表單即可!
void subForm_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true; //關閉視窗時取消
subForm.Hide(); //隱藏式窗,下次再show出
}
如下圖:
文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)
另外要轉載請附上出處 感謝