【问题标题】:How to close a windows form and transfer control to an other form?如何关闭窗口窗体并将控制权转移到另一个窗体?
【发布时间】:2010-03-19 06:19:26
【问题描述】:

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

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

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

如何解决这个问题?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    我通常处理这个问题的方式是使用类似于 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 方法中创建和销毁的,因此它不会在内存中保留超过必要的时间。

    【讨论】:

      【解决方案2】:

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

      显然,您将使用第二种形式作为传递给您的 Main() 函数中的 Application.Run 的形式。

      【讨论】:

        【解决方案3】:

        更简单 - 进入 main 方法。打开第一个窗体为 DIALOG,初始化应用程序,使用 Application.Run 打开第二个窗体。完成了。

        【讨论】:

          【解决方案4】:

          我想你已经用过

           LoginForm.Hide();
          

          使用

           LoginForm.Close();
          

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多