很多做winform的朋友在做登陸界面的時候總會遇到這個問題:
當用戶輸入正確,登陸的時候,new出一個想顯示的窗口,然後show這個新窗口對象,在將當前窗體this,close掉
這一切看起來貌似合理正常,可就是沒有顯示,原因我相信大家馬上就找到了,對就是父窗體都不在了(執行了close()方法了)
他裏面的所有對象(當然包括你剛剛new出來的新的想要顯示的登陸後的窗體了)都將不在了,此刻的應用程序就結束了
有沒有辦法呢?哈哈,當然有了,不然就不在這裏寫了,應該去microsoft的版塊兒寫了。
每個winform都有個program的類文件,這裏顯示了應用程序的入口Main函數,這裏就會從一開始new出,並run起來你的第一個窗體
因此我們的辦法就是在這裏下功夫:
原理:
program類中application.run是依次執行的,也就是說如果有兩句application.run()的話,另外一句要再這一句執行完返回以後纔會執行,
那麼,什麼時候算執行完呢,窗體關閉,run裏面參數所運行的窗體實例關閉的時候,就會返回了,所以我們有了辦法;
直接看代碼
public static bool Login = false;//登陸成功後改爲true就好
/// <summary>
/// 應用程序的主入口點。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new FrmCJ());
FrmLogin l = new FrmLogin();//登陸窗體
Application.Run(l);//運行
if (Login)
{
FrmCJ CJ = new FrmCJ();//主窗體
Application.Run(CJ);//運行
}
}
}