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

Dan*_*Dan 8 c# winforms

在我的程序中,我在主窗体之前显示一个登录表单,一旦程序检测到成功登录,我就用它:

MainForm Main = new MainForm();
Main.Show();
this.Hide();
Run Code Online (Sandbox Code Playgroud)

这工作正常,但有一个问题,登录表单仍然是打开的,即使它是隐藏的,所以当程序关闭时,进程仍然挂起,我怎么能阻止这种情况发生?

对不起,忘了添加,使用this.Close();不起作用,将完全关闭该程序.

Dav*_*ton 10

尝试更像这样的东西:

this.Hide();
Main.ShowDialog();
this.Close();
Run Code Online (Sandbox Code Playgroud)

您希望在显示对话框之前隐藏登录表单,然后在关闭对话框后关闭登录表单.

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

简单地说,按照您希望它们进入的顺序放置内容,尤其是在处理消息循环时.

首先,隐藏登录表单.
接下来,显示"主窗体"对话框,但阻止"ShowDialog()"的调用者继续,直到关闭对话框.
最后,关闭对话框后,关闭登录表单,结束应用程序.


Sam*_*ich 8

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

Program.cs中

    Application.Run(new MainForm());
Run Code Online (Sandbox Code Playgroud)

MainForm.cs

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

Close如果它是您的应用程序的主要形式,PS 将完全关闭您的应用程序.