为什么我的表格没有关闭/隐藏?

时间:2012-02-25 08:12:02

标签: c# .net winforms

我不知道为什么我的登录表单没有关闭或隐藏,即使我已经使用“this.Hide,我试图关闭然后打开另一个,第二个表单打开但是登录仍在运行,为什么会这样? 这是我的代码

public void verifyAccount()
        {
            var hashedPassword = getPassword();

            var hasher = new Hasher();

            hasher.SaltSize = 16;

             hasher.CompareStringToHash(txtPassword.Text, hashedPassword);

            if (!hasher.CompareStringToHash(txtPassword.Text, hashedPassword))
            {
                MessageBox.Show("Invalid UserName or Password");
            }
            else
            {
                MainWindow main = new MainWindow();

                main.ShowDialog();
                this.Hide();
            }   
        }
编辑:随着人们的评论,我发现了如何关闭登录表单的想法,这是我的解决方法

MainWindow main = new MainWindow();
                this.Hide();
                main.ShowDialog();
                this.Close();

4 个答案:

答案 0 :(得分:2)

main.ShowDialog();是一个阻止通话。在关闭主窗口之前,控件不会运行到下一行。

答案 1 :(得分:0)

这是因为您使用ShowDialog等待表单在执行更多代码之前关闭。尝试

main.Show();
this.Close();

答案 2 :(得分:0)

ShowDialog将表单显示为模式对话框,因此它阻止了对this.Hide()的调用。只有在关闭MainWindow后才会调用Hide()。你有几个选择:在ShowDialog之前调用this.Hide()。或者没有你的MainWindow是模态的。

答案 3 :(得分:0)

在这种情况下,您的登录表单是主应用程序的父级。从应用程序设计的角度来看,如果可能更好:

  1. Program.cs以模态方式打开登录表单
  2. 用户输入凭据并按登录
  3. 检查凭据,如果正确的表单关闭,则执行将返回到program.cs
  4. Program.cs检查表单上的属性以确定登录是否成功
  5. 如果是,则打开主申请表
  6. 但请注意,这并不能确保应用安全,因为有人可以在自己的项目中引用您的exe并以编程方式打开您的主表单。但这是另一场讨论。