Почему моя форма не закрывается / скрывается? - PullRequest
1 голос
/ 25 февраля 2012

Я не понимаю, почему моя форма входа в систему не закрывается и не скрывается, хотя я уже использую «this». Я пытаюсь закрыть с того момента, когда открываю другую, открывается вторая форма, ноВход по-прежнему работает, почему это так? Вот мой код

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 ]

2 голосов
/ 25 февраля 2012

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

0 голосов
/ 25 февраля 2012

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

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

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

0 голосов
/ 25 февраля 2012

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

0 голосов
/ 25 февраля 2012

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

main.Show();
this.Close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...