c# -显示新表单后关闭旧表单失败

本文关键字:表单 失败 显示 新表单 | 更新日期: 2023-09-27 18:17:49

我正在创建一个登录函数。验证密码后,将调用主表单。下面是部分代码:

Login.cs

private void btnLogin_Click(object sender, EventArgs e)
{
    //Interaction with Database
    Main.Show();
    this.Close();
}

正如我所期望的,只有登录表单将被关闭,主表单将保持不变。

但是,在最后一个命令执行后,它们都将关闭。

如何解决这个问题?

c# -显示新表单后关闭旧表单失败

在program.cs中输入Application.Run(main);

然后在main.load事件中使用show dialog打开您的登录表单

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Main());
}

and on main

public Main()
{
    InitializeComponent();
    Login p = new Login();
    DialogResult dr = p.ShowDialog();
    if (dr == DialogResult.OK)
    {
        //...
    }
    else
        Application.Exit();
}

如果关闭主表单,应用程序将终止。除了关闭外,您还可以使用:

隐藏主表单
this.Hide();
private void btnLogin_Click(object sender, EventArgs e)
{
    // hide main form
    this.Hide();
    // show other form
    Form2 form2 = new Form2();
    form2.Show();
    // close application
    this.Close();
}

如果您打开Program.cs文件,您将看到如下命令:

    Application.Run(new PasswordForm());

在这个命令中指定的形式是使程序存在的东西,当这个形式关闭时,STA线程继续执行,然后结束,关闭整个应用程序。

要解决这个问题,在调用Application之前,创建一个密码表单的实例并在Program.cs文件中执行所有这些操作。在主UI表单上运行