C#:如何防止主表单显示得太早

时间:2009-01-30 10:12:48

标签: c# winforms

在我的main方法中,我像往常一样启动主窗体:

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm());

在主要表单加载中我有以下内容,它将要求用户登录并填充。

        using (loginForm)
        {
            DialogResult r = loginForm.ShowDialog();
            switch (r)
            {
                case DialogResult.OK:
                    break;
                default:
                    Application.Exit();
                    return;

            }
        }

我的问题是主要表单出现在后台,我想要它,好吧......不是。直到登录确定。我该怎么做? Application.Run()方法说它会自动显示表单。是否有另一种方法可以启动主窗体而不显示它?或者我必须在主窗体的构造函数中将visible设置为false,然后在登录完成后返回true,或类似的东西?做这样的事情的推荐方法是什么?登录表单意图就像一个组合的启动画面和登录。首先它加载并设置一些不同的东西,然后它告诉用户登录。

4 个答案:

答案 0 :(得分:11)

而不是:

Application.Run(new MainForm());

尝试:

LoginDialog // the class that handles login UI
  login = new LoginDialog ();

if (login.ShowDialog () == DialogResult.OK)
{
   // check credentials
   // if credentials OK
   Application.Run(new MainForm());
}

ShowDialog方法是一个阻塞调用,程序将暂停,直到对话框因用户输入而关闭 - 按“确定”按钮或“取消”按钮。

答案 1 :(得分:2)

最简单的方法是使用Application.Run启动登录表单。当登录正常并且已设置其他内容时,只显示“主要”表单。

Application.Run(new LoginForm());

并在确定按钮的登录表单中:

this.Visible = false;
this.ShowInTaskbar = false;
MainForm mainForm = new MainForm();
mainForm.Show();

答案 2 :(得分:0)

我喜欢Skizz的回答,但如果这对你没有帮助,你也可以在加载MainForm的情况下做到这一点。只需将代码放在那里即可显示登录对话框。

答案 3 :(得分:-3)

在调用主表单之前,

有一点sleep?还是OnLoadComplete?