首先是我們進行窗口間的跳轉,尤其注意的是winform程序里面的空間都是中線程安全的。但是注意的是如果你在一個線程中操縱另外的控件,這時候會提示你一個錯誤,這個錯誤的解決方法准備單獨的在另一篇文章中來講。
好了,這時候回到主題上吧,怎么來實現界面間的跳轉吧!假設我們想要從Form1跳轉到Form2,那么可以有以下的集中方法:
1. 使用form的show屬性(注:show彈出來的是普通無模式窗體,與下個要講的ShowDialog是有區別的)
Form2 frm=new Form2();
frm.show();
this.close(); //this 這兒是Form1對象,例如在跳轉到Form2后關閉釋放所持有的資源
this.Dispose(); //這也是為了釋放資源
注:Dispose()也是用來釋放資源的,但是不同的是如果窗體屬於多文檔界面應用程序的一部分且是不可見的,那么Close將不會釋放窗體,從而我們必須自己手動調用Dispose來釋放窗體資源。
還有要注意的是在無模式窗體上調用Close方法時候,不能調用Show方法使得窗體可見,因為窗體的資源已經被釋放。所以若是要隱藏窗體,那么可以調用Control.Hide方法。
2.使用form的ShowDialog屬性
Form2 frm=new Form2();
frm.ShowDialog();
this.Dispose();
使用ShowDialog和show產生的窗體到底有什么不一樣呢?呵呵,其實ShowDialog彈出的窗體是一種有模式的對話框,並且當前活動的窗體為彈出的窗口的持有者。
窗體和對話框要么是有模式的,要么是無模式的。“模式”窗體或對話框必須關閉或隱藏,然后才能繼續使用應用程序的其余部分
還有注意的是在多線程里面,調用用showdialog方法可以避免線程的錯誤,具體原因也不是很清楚。
3.可以在Program.cs中做手腳
我們知道,Program里面的程序是配置了我們整個應用程序的入口點。那么就修改吧,
將以下的本來的代碼注釋掉:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new logForm());
改成:
Form logFrm = new logForm(); //為第一個顯示的窗體
if (logFrm.ShowDialog() == DialogResult.OK)
{
Application.Run(new MainForm()); //為第二個要彈出的窗體
}
然后只要在要跳轉的代碼段寫如下:
this.DialogResult = DialogResult.OK; //this 指向的是logForm
這樣就OK了。
