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(); } }
上述兩種方法都可以實現資源的釋放,下文介紹窗體傳值。