2012-02-25 48 views
1

我不明白爲什麼我的登錄表單沒有關閉或隱藏,即使我已經在使用「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(); 

回答

2

main.ShowDialog();是一個阻塞呼叫。直到關閉主窗口,控制纔會運行到下一行。

+0

好的,謝謝,我終於找到了解決辦法 – KyelJmD 2012-02-25 08:31:27

0

這是因爲你使用ShowDialog等待表單被關閉,然後再執行代碼。

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

但之後我的第二個也是關閉 – KyelJmD 2012-02-25 08:27:29

0

ShowDialog將窗體顯示爲模態對話框,所以它阻止了對this.Hide()的調用。 Hide()只會在關閉MainWindow後被調用。你有幾個選項:在ShowDialog之前調用this.Hide()。或者沒有你的MainWindow模態。

+0

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

0

在這種情況下,您的登錄表單是主應用程序的父級。

  1. Program.cs中打開登錄表單模態
  2. 用戶輸入憑據並按下登錄
  3. 憑證進行檢查,如果正確的窗體關閉,執行的是:從一個角度應用程序設計的點,如果它可能會更好回到Program.cs的
  4. 的Program.cs檢查窗體上的屬性,以確定登錄是否成功
  5. 如果是這樣,主要應用形式打開

但是,請注意,這並沒有真正使應用程序安全,因爲有人可以引用你的exe在他們自己的項目和編程打開你的主窗體。但那是另一個討論。

相關問題