我想显示对话框,要求用户选择目录,如果一切正常,将显示主窗体,否则程序将关闭,我想轻轻地做,但我的解决方案不是。< / p>
在Program类(Program.cs)中我定义了调用对话框的方法,并根据其结果使用main方法调用表单。
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (DisplayFolderDialog())
Application.Run(new addonInstallerForm());
}
有没有更好的方法来实现这一目标?
答案 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());
}
}