Windows窗体-在窗体前显示对话框

本文关键字:窗体 显示 对话框 Windows | 更新日期: 2023-09-27 18:20:41

我想显示对话框,要求用户选择目录,如果一切正常,将显示主窗体,否则程序将关闭,我想温和地进行,但我认为我的解决方案不是。

在程序类(Program.cs)中,我定义了一个调用对话框的方法,根据它的结果,Main方法是否会调用窗体。

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    if (DisplayFolderDialog())
        Application.Run(new addonInstallerForm());
}

有更好的方法来实现这一点吗?

Windows窗体-在窗体前显示对话框

这是可以的,你通常可以逃脱惩罚。然而,这种方法有两个可用性问题:

  • 在一瞬间,您的程序没有一个可以接收焦点的窗口。对话框关闭后,可能需要一段时间才能显示addonInstallerForm窗口。这可能是一个问题,操作系统需要给予另一个窗口关注。如果不是一瞬间,而是主窗口需要几秒钟才能出现,通常是因为查找程序集、磁盘和抖动代码带来的开销,那么Windows决定应该将焦点放在另一个应用程序上。你的主窗口会消失在其他应用程序的窗口后面。当然,这会极大地困扰用户,他甚至可能认为你的程序崩溃了。

  • 除非你对此做了明确的处理,否则你的主窗口将以不同于对话框的位置和大小出现在屏幕上。不太好,这也会让用户迷失方向,当然,虽然没有消失的窗口问题那么严重。

这些问题有些难以解决,因为您使用ShowDialog()。当然,实际上并没有必要使用对话框,它只是让编写代码变得更容易。请注意,你每天使用的大多数程序都不会这样做。例如,它们有一个"文件+打开"命令。或者他们有一个类似向导的UI,可以将您从一个窗口移动到另一个窗口。

使用ShowDialog()最常见的原因是为了解决Winforms在主窗口关闭时自动终止程序的问题。使用此代码很容易解决。用于创建具有不同表单的向导样式的用户界面。创建向导的另一种非常便宜的方法是使用没有可见选项卡的TabControl。您仍然可以使用对话框,只需在关闭对话框之前公开您触发的事件。等等。

我总是像你一样处理我的应用程序。我在主表单之前有一个登录页面。我认为这是最好的方式之一。你应该坚持下去。这是我的登录逻辑的一个例子

static void Main()
{
     Application.SetCompatibleTextRenderingDefault(false);
     Application.EnableVisualStyles();
     DialogResult result;
     using (var loginForm = new frmLogin())
     {
         result = loginForm.ShowDialog();
     }
     if (result == DialogResult.OK)
     {
         // login was successful
         Application.Run(new Form1());
     }
}