【问题标题】:Windows Forms - Display dialog before formWindows 窗体 - 在窗体之前显示对话框
【发布时间】:2014-09-05 09:46:26
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# winforms coding-style


    【解决方案1】:

    没关系,你通常会逃脱它。然而,这种方法存在两个可用性问题:

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

    • 除非您明确地对其进行处理,否则您的主窗口将出现在屏幕上的不同位置和与对话框不同的大小。不太好,这也会使用户迷失方向,尽管当然没有窗口消失问题那么严重。

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

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

    【讨论】:

    • 嗯.. 向导就是我所需要的,除了执行以下步骤外,用户无能为力。我会试试的:)谢谢你的帮助。
    【解决方案2】:

    我总是像你一样做我的申请。我有一个登录页面,位于主表单之前。我认为这是最好的方法之一。你应该坚持下去。这是我的登录逻辑示例

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-22
      • 2023-03-17
      • 2022-01-08
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      相关资源
      最近更新 更多