为什么我的表单不能关闭/隐藏?

问题描述:

我不明白为什么我的登录表单没有关闭或隐藏,即使我已经在使用“this.Hide,我试图关闭然后打开另一个,第二个窗体打开但Log中仍然存在运行这是为什么 这里是我的代码为什么我的表单不能关闭/隐藏?

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

main.ShowDialog();是一个阻塞呼叫。直到关闭主窗口,控制才会运行到下一行。

+0

好的,谢谢,我终于找到了解决办法 – KyelJmD 2012-02-25 08:31:27

这是因为你使用ShowDialog等待表单被关闭,然后再执行代码。

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

但之后我的第二个也是关闭 – KyelJmD 2012-02-25 08:27:29

ShowDialog将窗体显示为模态对话框,所以它阻止了对this.Hide()的调用。 Hide()只会在关闭MainWindow后被调用。你有几个选项:在ShowDialog之前调用this.Hide()。或者没有你的MainWindow模态。

+0

你是什么意思的模态? – KyelJmD 2012-02-25 08:28:29

在这种情况下,您的登录表单是主应用程序的父级。

  1. Program.cs中打开登录表单模态
  2. 用户输入凭据并按下登录
  3. 凭证进行检查,如果正确的窗体关闭,执行的是:从一个角度应用程序设计的点,如果它可能会更好回到Program.cs的
  4. 的Program.cs检查窗体上的属性,以确定登录是否成功
  5. 如果是这样,主要应用形式打开

但是,请注意,这并没有真正使应用程序安全,因为有人可以引用你的exe在他们自己的项目和编程打开你的主窗体。但那是另一个讨论。