C#打开一个新表单并关闭另一个表单

C#打开一个新表单并关闭另一个表单,c#,winforms,C#,Winforms,在我的程序中,我在主窗体之前显示一个登录窗体,一旦程序检测到成功登录,我将使用以下命令: MainForm Main = new MainForm(); Main.Show(); this.Hide(); 这很好,但有一个问题,登录表单仍然是打开的,即使它是隐藏的,所以当程序关闭时,进程仍然挂起,我如何才能阻止这种情况发生 抱歉,忘记添加,请使用this.Close()不起作用,将完全关闭程序。如何改为这个。关闭()?将主窗体更改为MainForm,当应用程序启动时,在MainForm\u中加

在我的程序中,我在主窗体之前显示一个登录窗体,一旦程序检测到成功登录,我将使用以下命令:

MainForm Main = new MainForm();
Main.Show();
this.Hide();
这很好,但有一个问题,登录表单仍然是打开的,即使它是隐藏的,所以当程序关闭时,进程仍然挂起,我如何才能阻止这种情况发生


抱歉,忘记添加,请使用
this.Close()
不起作用,将完全关闭程序。

如何改为
这个。关闭()

将主窗体更改为
MainForm
,当应用程序启动时,在
MainForm\u中加载
作为对话框启动登录窗体,这样他们就无法访问主窗体

  • 如果您需要能够从登录表单关闭应用程序,请使用
    application.Exit(0)
  • 如果您不想让他们看到主窗体查找和覆盖
    SetVisibilityCore
    并在内部调用它
    MainForm\u Load

尝试类似以下内容:

this.Hide();
Main.ShowDialog();
this.Close();
您希望在显示对话框之前隐藏登录表单,然后在关闭对话框后关闭登录表单

简单地关闭登录对话框将最终结束应用程序,因此这不是一个真正的解决方案,但您仍然希望隐藏登录

简单地说,按照您希望的顺序进行操作,尤其是在处理消息循环时

首先,隐藏登录表单。
接下来,显示主窗体对话框,但在对话框关闭之前,阻止“ShowDialog()”的调用者继续操作。

最后,关闭对话框后,您将关闭登录表单,从而结束应用程序

启动应用程序时,需要指定您的
main表单
,并在此表单的
Load
事件处理程序中请求登录。在这种情况下,您将在启动时运行应用程序并登录:

Program.cs

    Application.Run(new MainForm());
    private void Form1_Load(object sender, EventArgs e)
    {
        LoginForm loginForm = new LoginForm();
        if (loginForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            // check login here
        }
    }
MainForm.cs

    Application.Run(new MainForm());
    private void Form1_Load(object sender, EventArgs e)
    {
        LoginForm loginForm = new LoginForm();
        if (loginForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            // check login here
        }
    }
p.S.
Close
将完全关闭您的应用程序,如果它是您的应用程序的主窗体。

您可以使用它来指定应用程序的当前主窗体:

static class Program
{
    public static ApplicationContext Context { get; set; }

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        Context = new ApplicationContext(new LoginForm());
        // pass Context instead of just new LoginForm()
        Application.Run(Context);
    }
}

如果在显示登录表单之前将MainForm隐藏在其加载事件中,则将更紧密地复制用户先打开登录表单的功能。