在我的应用程序中,如果登录成功,我想先显示一个登录表单,然后显示主表单。目前,我正在执行以下操作:
var A = new LoginForm(); if ( A.ShowDialog() == DialogResult.OK ) Application.Run(new MainForm());
但是后来我开始怀疑-这是什么意思Application.Run()?为什么不这样做(new MainForm()).ShowDialog()呢?有什么不同?而实现我想要的目标的正确方法是什么?
Application.Run()
(new MainForm()).ShowDialog()
Application.Run(Form)在当前线程上启动消息循环并显示指定的形式。消息循环使表单能够接收Windows消息(例如,按键,鼠标单击,绘画无效),以使其显示响应性并与用户进行交互。当你调用ShowDialog()一个Form实例,它实际上做了类似的事情,并为在其上形成一个模式消息循环ShowDialog被调用。
Application.Run(Form)
ShowDialog()
Form
ShowDialog
两次调用之间没有太大区别。Application.Run确实添加了一些额外的事件处理,使您可以在关闭主窗体时整理一些资源(请参阅Application.ThreadExit)。
Application.Run
建议使用WinForms应用程序启动方法Application.Run,但是我怀疑这更多是一种约定,而不是一条规则。使用最大的理由Application.Run是,如果您想打开多个非模式表单。您可以使用:
new Form().Show(); new Form().Show(); Application.Run();
使用该ShowDialog()方法无法实现此目的,因为其中一种形式必须是模态的。
至于您如何显示登录表单然后如果成功登录则显示主表单的问题,我认为您可以使用:
if (new LoginForm().ShowDialog() == DialogResult.OK) { Application.Run(new MainForm()); }
另一种方法是自己做管道MainForm,LoginForm如果登录成功,则在关闭事件中打开一个实例。
MainForm
LoginForm