如何正确关闭当前表格并打开新表格?

how to close current form and open new form properly?

我正在尝试关闭当前表单并在登录时打开主表单。我正在尝试按照已接受的答案 here 中给出的方式进行操作。这就是我修改 Program.cs 的方式。登录表单工作正常。它打开登录表单。但是当我登录时如何显示主?如何在我的登录表单中使用此对话框结果来显示 main.

  static void Main()
    {

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        using (var login = new frmLogin())
        {
            if (login.ShowDialog() != DialogResult.OK) return;
        }

        Application.Run(new frmMainAdmin());  
   }

如何在我的登录表单中实现上述代码中给出的对话框结果?实在是看不懂。

以下是我在登录表单中执行登录的方式。在按钮点击事件中。

        SqlDataReader reader = new loginUserOP().userLogin(txtUserID.Text, txtpwd.Text);
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    LoggedUserInfo.lguserfname = (String)reader[0];
                    LoggedUserInfo.lguserlname = (String)reader[1];
                    LoggedUserInfo.lgusercategory = (String)reader[2];
                    LoggedUserInfo.lguserloginid = (String)reader[3];
                    LoggedUserInfo.lguserid = (int)reader[4];
                }
                reader.Close();
                }

你的代码很好,而且可以工作,问题是你从来没有给它工作的机会,因为你从不关闭 frmLogin

当表单通过 ShowDialog 显示时,它们依赖于表单上的 DialogResult property being set in order for it to determine which action to take - a form will generally read this in from a button control。您可以在设计时设置它,但是,您需要在设置结果 之前验证 ,因此您需要执行类似

的操作
private void btnLogin_Click(object sender, EventArgs e)
{
    using (var reader = new loginUserOP().userLogin(txtUserID.Text, txtpwd.Text))
    {
        if (reader.HasRows)
        {
            while (reader.Read())
            {
                LoggedUserInfo.lguserfname = (String)reader[0];
                LoggedUserInfo.lguserlname = (String)reader[1];
                LoggedUserInfo.lgusercategory = (String)reader[2];
                LoggedUserInfo.lguserloginid = (String)reader[3];
                LoggedUserInfo.lguserid = (int)reader[4];
            }
            // remove the modal dialog and let the application start
            this.DialogResult = DialogResult.OK;
        }
    }
}

您还应该注意到,单击 frmLogin 右上角的红色 X 会终止应用程序,这是因为 DialogResult.Cancel 是自动为您设置的。