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

标签 c# winforms coding-style

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

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

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

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

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

最佳答案

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

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

  • 除非您明确执行某些操作,否则主窗口将以与对话框不同的位置和不同的大小显示在屏幕上。不太好,这也会让用户迷失方向,尽管当然没有窗口消失问题那么严重。

这些问题有些难以解决,因为您使用了 ShowDialog()。当然实际上并不是必须使用对话框,它只是使编写代码更容易。请注意,您日常使用的大多数程序都不会执行此操作。例如,它们有“文件+打开”命令。或者他们有一个类似向导的用户界面,可以将您从一个窗口移动到另一个窗口。

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

关于c# - Windows 窗体 - 在窗体之前显示对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25683016/

相关文章:

c# - 如何从.NET Core API调用Azure门户中的函数App

c# - 骰子游戏的随机数

c# - 有什么方法可以像我挂接键盘键一样全局挂接鼠标操作吗?

c# - 从库中捕获主线程 SynchronizationContext 或 Dispatcher

coding-style - Elixir 是否有编码标准或由语言开发人员发布的权威风格指南,如 PEP8 或 Erlang 编程规则?

drupal - 如何在 Drupal 6 的 View 中创建自定义样式输出?除了网格、表格、HTML 列表之外?

c# - 方法名称是否隐式转换为委托(delegate)类型?

c# - 调用单元测试委托(delegate)操作

c# - 嵌套动态控件,使用自定义事件处理程序

c - 声明常量指针最清晰的方法是什么?