【问题标题】:how to close current form and open new form properly?如何正确关闭当前表单并打开新表单?
【发布时间】:2015-01-26 21:29:49
【问题描述】:

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

  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();
                }

【问题讨论】:

  • frmMainAdmin 是否在设计器中将Visible 设置为falseApplication.Run 应该使表单可见,您不需要做任何事情。
  • frmLogin 实际上包含敏感信息(和资源),使用语句简单地处理它。当然,如果您需要任何形式的内容,则必须将其保存到该范围之外的变量中...
  • @AdrianoRepetti 这超出了问题的范围。
  • @James 不,这不是假的。我不明白的是,当我在登录表单中执行登录功能时要设置什么?当我执行登录以显示该对话框结果时,我是否必须设置任何值?
  • @chathwind 我想你看到了frmLogin?那么,在实际应用程序中,您当然需要验证登录详细信息在启动之前,然后再启动应用程序。但是,在示例中,在登录表单上单击“确定”就足以假设登录成功并且主表单显示。

标签: c# winforms


【解决方案1】:

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

当通过ShowDialog 显示表单时,它们依赖于设置的DialogResult 属性来确定要采取的操作——表单通常会从表单上的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

【讨论】:

  • 感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2010-12-20
  • 2012-09-22
  • 2013-06-22
  • 2014-02-02
  • 2014-04-07
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多