2012-02-25 5 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(); 
      } 
     } 

EDIT: с народы комментарии я нашел идею о том, как я буду закрывать журнал в форме, вот мой обходной

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

ответ

2

main.ShowDialog(); является блокирующим вызовом. Элемент управления не будет работать до следующей строки, пока вы не закроете главное окно.

+0

Хорошо, я наконец нашел работу вокруг – KyelJmD

0

Это потому, что вы используете ShowDialog, которые ждут, когда форма будет закрыта, прежде чем выполнять больше кода.

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

Но после этого мой второй из также закрывается – KyelJmD

0

ShowDialog показывает форму как модальное диалоговое окно, поэтому оно блокирует вызов this.Hide(). Скрыть() вызывается только после закрытия MainWindow. У вас есть несколько вариантов: назовите this.Hide() перед ShowDialog. Или ваш MainWindow не будет модальным.

+0

Что вы подразумеваете под модальным? – KyelJmD

0

В этом случае ваша форма входа является родительской для основного приложения. От проектирования приложений точки зрения, было бы лучше, если:

  1. Program.cs открывает регистрационную форму модально
  2. Пользователь вводит учетные данные и прессы войдите
  3. учетные данные проверяются, и если правильная форма закрывается, исполнение вернулся в Program.cs
  4. Program.cs проверяет свойство на форме, чтобы определить, был ли успешным Войти
  5. Если да, то открывается главная форма приложения

Обратите внимание, что это действительно не делает приложение безопасным, так как кто-то может ссылаться на ваш exe в своем собственном проекте и программно открывать вашу основную форму. Но это еще одна дискуссия.

Смежные вопросы