gpt4 book ai didi

c# - Application.Run() 和 Form.ShowDialog() 有什么区别?

转载 作者:IT王子 更新时间:2023-10-29 03:42:34 26 4
gpt4 key购买 nike

在我的应用程序中,我想先显示一个登录表单,然后在登录成功时显示主表单。目前我正在做这样的事情:

var A = new LoginForm();
if ( A.ShowDialog() == DialogResult.OK )
Application.Run(new MainForm());

但后来我开始怀疑 - Application.Run() 的意义何在?为什么不同时执行 (new MainForm()).ShowDialog() 呢?有什么不同?实现我想要的目标的正确方法是什么?

最佳答案

Application.Run(Form) 在当前线程上启动消息循环并显示指定的表单。消息循环使窗体能够接收 Windows 消息(例如,按键、鼠标单击、绘制无效)以允许它显示响应并与用户进行交互。当您在 Form 实例上调用 ShowDialog() 时,它实际上做了类似的事情并为 ShowDialog 所在的表单创建了一个模态消息循环已被调用。

两者的调用没有太大区别。 Application.Run 确实添加了一些额外的事件处理,使您能够在主窗体关闭时对资源进行一些整理(参见 Application.ThreadExit )。

启动 WinForms 应用程序的推荐方法是使用 Application.Run,但我怀疑这更像是一种约定而非规则。使用 Application.Run 的最大原因是您想要打开多个非模式窗体。您可以使用:

new Form().Show();
new Form().Show();
Application.Run();

您无法使用 ShowDialog() 方法实现此目的,因为其中一种形式必须是模态的。


关于您的问题,如果登录成功,如何显示登录表单,然后显示主表单,我认为您拥有的很好:

if (new LoginForm().ShowDialog() == DialogResult.OK)
{
Application.Run(new MainForm());
}

另一种方法是自己进行管道连接,如果登录成功,则在 LoginForm 的关闭事件中打开 MainForm 的实例。

关于c# - Application.Run() 和 Form.ShowDialog() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2314514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com