[C#|WinForm] 如何讓表單視窗(Form)關閉時,在次顯示(Show)時不會出現"無法存取已處置的物件。"

最近做實驗需要透過表單視窗來顯示畫面,但是關閉表單後,如果要再透過Show()方法去顯示卻會出線「無法存取已處置的物件。"」的例外,其實解決方式很簡單,我們只要先將表單隱藏起來,而不是真的關閉,然後在顯示即可。

前言

 


 

最近做實驗需要透過表單視窗來顯示畫面,但是關閉表單後,如果要再透過Show()方法去顯示卻會出線「無法存取已處置的物件。"」的例外,如下圖:

error

 

其實很簡單,我們只要先將表單隱藏起來,而不是真的關閉,然後在顯示即可。

 

實作方式

 


 

這邊我自己建立一個子表單叫subForm,Codebehind如下


Form subForm;
        int clickCount;
        public Form1()
        {
            InitializeComponent();
            subForm = new Form();
            clickCount = 1;
        }

 

然後我的WinForm介面拉了一個Button

ShowForm

並且在點擊事件中去紀錄點擊的次數,並顯示在子表單的Title


private void button1_Click(object sender, EventArgs e)
       {
           subForm.Text = "子視窗點擊次數:" + clickCount + "次";
           subForm.Show();
           clickCount++;
       }

但是如果只有這樣,當我們關閉子表單,再次點擊Button後會跳出此例外

 

error

 

所以我們需要透過Form的FormClosing事件來協助我們解決

註冊事件:


subForm.FormClosing += subForm_FormClosing;

 

事件處理:

先把關閉的動作取消,然後再隱藏表單即可!


void subForm_FormClosing(object sender, FormClosingEventArgs e)
       {
           e.Cancel = true; //關閉視窗時取消
           subForm.Hide(); //隱藏式窗,下次再show出
       }

 

如下圖:

 


 

文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)

另外要轉載請附上出處 感謝