Winform開發之窗體顯示、關閉與資源釋放


Winform的窗體涉及到一般窗體(單文檔窗體)、MDI窗體、窗體之間的關系等,那么如果調用打開新窗體、如何關閉窗體、窗體資源的釋放等都關系到軟件運行的效率,本文一一介紹

1、窗體的顯示

從一個窗體打開另一個窗體,基本會用到兩種方法,即Show()和ShowDialog(),前者是一般的窗體,后者是模態窗體。

兩種調用是由些許的不同

(1)在調用Form.Show方法后,Show方法后面的代碼會立即執行 

(2)在調用Form.ShowDialog方法后,寫在其后面的程序會在模態窗口關閉后再執行。

感覺有點兒繞啊,貼代碼貼圖就很清楚了

 private void button1_Click(object sender, EventArgs e)
        {
            Form3 fr3 = new Form3();
            fr3.Show();
            MessageBox.Show("show之后的動作");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Form3 fr3 = new Form3();
            fr3.ShowDialog();
            MessageBox.Show("showDialog之后的動作");
            
        }

下圖是show的調用,那么執行完fr3.Show()之后會馬上執行后面的彈出提示框

下圖是showdialog的調用,那么只有當彈出的窗口fr3關閉后才會執行提示框

看到了吧,Fr3窗體關閉后才運行后面的提示框。

2、窗體之間的關系

窗體之間的關系其實很簡單,當一個窗體歸另一窗體所有時,它便隨着所有者窗體最小化和關閉而最小化或關閉。

 private void button1_Click(object sender, EventArgs e)
        {
            Form3 fr3 = new Form3();
            //fr3.Owner = this;這樣設置也是可以的           
            fr3.Show(this);           
        }

上面兩種方法都可以,當然ShowDialog方法也適用,下面代碼是獲取所有者的名稱

 private void Form3_Load(object sender, EventArgs e)
        {
            label1.Text ="該窗體的所有者是"+this.Owner.Name;
        }

貼個效果圖

3、窗體的關閉、銷毀

窗體的及時關閉和銷毀對軟件的效率、對計算機的資源占用都非常重要。

在以下兩種情況下調用 Close 不會釋放窗體:(1) 窗體是多文檔界面 (MDI) 應用程序的一部分且是不可見的;(2) 您是使用 ShowDialog 顯示的該窗體。在這些情況下,需要手動調用 Dispose 來將窗體的所有控件都標記為需要進行垃圾回收。所以當窗體顯示為模態窗體時,單擊“關閉”按鈕會隱藏窗體,並將DialogResult屬性設置為DialogResult.Cancel 

如果不需要此模態窗口,請立即對其進行銷毀,銷毀代碼可以用以下兩種方式寫

(1)在Form3的關閉事件里

 private void Form3_FormClosed(object sender, FormClosedEventArgs e)
        {
            this.Dispose();
        }

(2)在Form3的關閉事件中將DialogResult設置為OK,在調用者里面判斷后釋放

//這是Form3的事件 
private void Form3_FormClosed(object sender, FormClosedEventArgs e)
        {
            this.DialogResult = DialogResult.OK;
        }
 
//這是Form2中調用
private void button2_Click(object sender, EventArgs e) { Form3 fr3 = new Form3(); if(fr3.ShowDialog()==DialogResult.OK) { fr3.Dispose(); } }

上述兩種方法都可以實現資源的釋放,下文介紹窗體傳值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM