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