作者:羅會濤
WinForm程序一般都是從一個Form的static void Main()開始運行,暫且稱此Form爲MainForm。Main函數的一般寫法是:
static void Main() { Application.Run(new Form1()); } |
這樣的寫法有一個問題:如果需要從Form1中調出另一個Form,必須保持Form1不能關閉,比如在一個Button的Click中調出Form2:
private void button1_Click(object sender, System.EventArgs e) { (new Form2()).Show(); } |
可以看到兩個Form同時顯示在屏幕上,如果改成:
private void button1_Click(object sender, System.EventArgs e) { (new Form2()).Show(); this.Close(); } |
那麼執行到this.Close()時,整個應用程序將終止運行,Form2也會自動關閉。
如果需要僅僅顯示Form2,除了將Form1.Close改爲Form1.Hide之外,還有一種辦法,就是將Main改爲:
static void Main() { (new Form1()).Show(); Application.Run(); // 啓動獨立的應用程序線程 } |
這樣Form1中的this.Close()就不會導致應用程序終止運行了,而且不需要Form1時,可以真正Close從而釋放一些資源。不過,應用程序的終止就不要在其他地方控制了,比如在Form2的Closed事件中:
private void Form2_Closed(object sender, System.EventArgs e) { Application.Exit(); } |
在多文檔應用程序中,往往需要在內部維護一個當前活動Form的列表,最後一個Form關閉時,再調用Application.Exit。
關於作者:
羅會濤是GrapeCity公司的技術總監。曾與他人合作著有《精通MS SQL Server 7.0》和《會計電算化實用技術》等書,在《計算機世界報》發表文章數篇。並曾在兩屆微軟DevDays技術大會上授課。