最近做實驗需要透過表單視窗來顯示畫面,但是關閉表單後,如果要再透過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出
       }
如下圖:
文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)
另外要轉載請附上出處 感謝


