Как закрыть форму окна и передать управление другой форме? - PullRequest
1 голос
/ 19 марта 2010

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

Как я могу закрыть форму входа и заставить пользователя перейти к следующей форме, которая является действительным приложением?

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

Как можно это исправить?

Ответы [ 4 ]

4 голосов
/ 19 марта 2010

То, как я обычно это делаю, - это код, аналогичный описанному в методе main;

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    if (PerformLogin())
    {           
        Application.Run(new MainForm());
    }
}

private static bool PerformLogin()
{
    using (LoginForm loginForm = new LoginForm())
    {
        if (loginForm.ShowDialog() == DialogResult.OK)
        {
            return AuthenticateUser(loginForm.UserName, loginForm.Password);
        }
        else
        {
            return false;
        }
    }
}

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

0 голосов
/ 19 марта 2010

Полагаю, вы использовали

 LoginForm.Hide();

Использование

 LoginForm.Close();

Я тоже могу ошибаться ... но просто пытаюсь везти ...

0 голосов
/ 19 марта 2010

Еще проще - попасть в основной метод. откройте первую форму как DIALOG, инициализируйте приложение, откройте вторую форму с помощью Application.Run. Закончено.

0 голосов
/ 19 марта 2010

Я бы сказал, что самым простым подходом было бы просто отобразить первую форму в событии Load второй как модальное диалоговое окно. Если аутентификация пароля не удалась, вы можете вызвать Close в обработчике событий, и вторая форма также исчезнет.

И, очевидно, вы бы использовали вторую форму в качестве формы, переданной Application.Run в вашей функции Main ().

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