Program.cs:
frmLogin objFrmLogin = new frmLogin();
DialogResult result = objFrmLogin.ShowDialog();
if (result == DialogResult.OK)
{
Application.Run(new frmMain());
}
frmLogin.cs:
this.DialogResult = DialogResult.OK;
原理:
在Run主窗口之前,先实例化一个登录窗口,
并将DialogResult作为参数来判定是否要打开frmMain窗口。
如果result为OK的话,则打开主窗体;
默认result是false的,只有你在某个地方触发事件使得DialogResult.OK,才会真正启动主程序。
注意,这个result是一直对下面的if语句有信号输送的,一旦登录窗口返回了DialogResult.OK的结果,frmMain就会打开,原frmLogin窗体就会自动关闭。
我们可以观察到:
Winform窗体实际上也是一个控制台程序。
真正的程序启动是
Application.Run(new frmMain());
这包含了之后了一些列的操作。
你可能会说,不是可以直接new窗口吗?
嗯,确实。
但是这样做不符合规范。
我们最好还是按照规范来,除非你对这一套程序设计非常了解了。
额外补充:
以:
frmLogin objFrmLogin = new frmLogin();
DialogResult result = objFrmLogin.ShowDialog();
的方式打开的新的窗口,和正常show出来的窗口不一样,result会等待返回值,所以
if (result == DialogResult.OK)
{
Application.Run(new frmMain());
}
以上的if代码是一定会等待result出结果才判定。
与直接Show出来的窗口不同的是,show出来的窗口你可能需要this.Close()来关闭;
而ShowDialog出来的窗口,只要有返回值,不管是DialogResult.OK还是DialogResult.No,这个窗口就会关闭。
这也是为什么用来做登录窗口非常合适的原因。