如何关闭Windows窗体并将控件转移到其他窗体?

时间:2010-03-19 06:19:26

标签: c# winforms

我的应用程序遇到了问题。我有两个表单,一个在我的应用程序启动时加载,要求输入密码,另一个在用户使用正确的密码登录时显示。

如何关闭登录表单并让用户进入下一个实际应用程序表单?

目前我隐藏了登录表单,但要求是关闭登录表单以防止额外处理。但是,当我关闭登录表单时,我的应用程序退出,当我隐藏登录表单但关闭实际的应用程序表单时,登录表单仍然打开并阻止我的应用程序关闭,因为登录表单仍然在后台运行。

如何解决这个问题?

4 个答案:

答案 0 :(得分:4)

我通常会处理这个问题的方法类似于main方法中的代码;

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

    if (PerformLogin())
    {           
        Application.Run(new MainForm());
    }
}

private static bool PerformLogin()
{
    using (LoginForm loginForm = new LoginForm())
    {
        if (loginForm.ShowDialog() == DialogResult.OK)
        {
            return AuthenticateUser(loginForm.UserName, loginForm.Password);
        }
        else
        {
            return false;
        }
    }
}

由于登录表单是在PerformLogin方法中创建和销毁的,因此它不会在内存中保留超过必要的时间。

答案 1 :(得分:0)

我想说最简单的方法就是在第二个的Load事件中显示第一个表单作为模态对话框。如果密码验证失败,您可以在事件处理程序中调用Close,第二个表单也将消失。

显然你会使用第二个表单作为Main()函数中传递给Application.Run的表单。

答案 2 :(得分:0)

更简单 - 进入主要方法。打开第一个表单作为DIALOG,初始化应用程序,使用Application.Run打开第二个表单。结束。

答案 3 :(得分:0)

我认为,你已经使用了

 LoginForm.Hide();

使用

 LoginForm.Close();

我也可能错了......但只是试着运气......