EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

C#Winform登录窗口的启动逻辑(附源码)

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,这个窗口就会关闭。

这也是为什么用来做登录窗口非常合适的原因。

This article was last edited at 2020-08-22 02:15:55

* *