2014-09-05 91 views
2

我想要显示对话框,要求用户选择目录,如果一切正常,主窗体将显示,否则程序将关闭,并且我想轻轻地将它,但我事情我的解决方案不是。窗体窗体 - 在窗体前显示对话框

在Program class(Program.cs)中,我定义了调用对话框的方法,并根据其结果调用Main方法将调用form或不调用。

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

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

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

回答

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

这是好的,你通常会摆脱它。然而,这种方法存在两个可用性问题:

  • 对于一瞬间,您的程序没有可以接收焦点的窗口。在对话框关闭后,可能需要一些时间才会显示您的addonInstallerForm窗口。这可能是一个问题,操作系统需要给予另一个窗口焦点。如果是而不是秒,但主窗口需要几秒钟才会出现,通常是因为查找程序集和磁盘以及查找代码而导致的开销,于是Windows决定应该将焦点放到另一个应用程序上。而你的主窗口消失在另一个应用程序的窗口后面。当然,让用户非常混淆,他甚至会认为你的程序崩溃了。

  • 除非您明确地做了一些事情,否则您的主窗口将以不同于对话框的位置显示在屏幕上。不是很好,这也会让用户感到迷惑,尽管不像消失的窗口问题那么严重。

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

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

+0

嗯..向导就是我所需要的,除了以下步骤之外,没有别的东西可以让用户做。我会尝试一下:)感谢您的帮助。 – Sajgoniarz 2014-09-05 12:20:00