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

时间:2014-09-05 09:46:26

标签: c# winforms coding-style

我想显示对话框,要求用户选择目录,如果一切正常,将显示主窗体,否则程序将关闭,我想轻轻地做,但我的解决方案不是。< / p>

在Program类(Program.cs)中我定义了调用对话框的方法,并根据其结果使用main方法调用表单。

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    if (DisplayFolderDialog())
        Application.Run(new addonInstallerForm());
}

有没有更好的方法来实现这一目标?

2 个答案:

答案 0 :(得分:3)

没关系,你通常会侥幸逃脱。但是这种方法存在两个可用性问题:

  • 一瞬间,您的程序没有可以获得焦点的窗口。对话框关闭后,可能需要一些时间才能显示 addonInstallerForm 窗口。这可能是一个问题,操作系统需要给另一个窗口关注焦点。如果一秒钟,但主窗口出现需要几秒钟,通常是因为查找程序集和磁盘以及查找代码而产生的开销,那么Windows决定它应该关注另一个应用。并且您的主窗口消失在其他应用程序的窗口后面。当然,用户非常困惑,他甚至可能认为你的程序崩溃了。

  • 除非您明确地对其进行某些操作,否则您的主窗口将在屏幕上显示在不同位置并且大小与对话框不同。不太好,这往往会使用户迷失方向,但当然不会像消失的窗户问题那样严重。

由于您使用ShowDialog(),因此这些问题有些难以解决。当然,实际上并不需要使用对话框,它只是使编写代码更容易。请注意您每天使用的大多数程序不会这样做。它们具有例如File + Open命令。或者他们有一个类似向导的UI,将你从一个窗口移动到另一个窗口。

达到ShowDialog()的最常见原因是解决Winforms在主窗口关闭时自动终止程序的问题。使用this code很容易解决。允许您创建具有不同表单的向导式UI。创建向导的另一种非常便宜的方法是使用TabControl without visible tabs。您仍然可以使用对话框,只显示在关闭对话框之前触发的事件。等等。

答案 1 :(得分:1)

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

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());
     }
}