C #: как предотвратить слишком рано показ основной формы - PullRequest
2 голосов
/ 30 января 2009

В моем основном методе я запускаю основную форму как обычно:

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm());

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

        using (loginForm)
        {
            DialogResult r = loginForm.ShowDialog();
            switch (r)
            {
                case DialogResult.OK:
                    break;
                default:
                    Application.Exit();
                    return;

            }
        }

Моя проблема в том, что основная форма отображается на заднем плане, и я хочу, чтобы ... ну ... нет. пока логин в порядке. Как мне это сделать? Метод Application.Run () сообщает, что автоматически показывает форму. Есть ли альтернативный способ запуска основной формы, не показывая ее? Или мне нужно установить visible в false в конструкторе главной формы, а затем вернуться в true, когда вход в систему сделан, или что-то подобное? Каков рекомендуемый способ сделать что-то подобное? Намерение форм входа в систему подобно комбинированному экрану-заставке и входу в систему. Итак, сначала он загружает и настраивает некоторые другие вещи, а затем он говорит пользователю, чтобы войти.

Ответы [ 4 ]

11 голосов
/ 30 января 2009

Вместо:

Application.Run(new MainForm());

попробовать:

LoginDialog // the class that handles login UI
  login = new LoginDialog ();

if (login.ShowDialog () == DialogResult.OK)
{
   // check credentials
   // if credentials OK
   Application.Run(new MainForm());
}

Метод ShowDialog является блокирующим вызовом, программа будет останавливаться до закрытия диалога в ответ на ввод пользователя - нажатием кнопки «ОК» или «Отмена».

2 голосов
/ 30 января 2009

Самое простое - запустить форму входа с помощью Application.Run. Когда логин в порядке и другие настройки установлены, просто покажите «главную» форму.

Application.Run(new LoginForm());

и в форме входа на кнопку ОК:

this.Visible = false;
this.ShowInTaskbar = false;
MainForm mainForm = new MainForm();
mainForm.Show();
0 голосов
/ 30 января 2009

Мне понравился ответ Skizz, но если это вам не поможет, вы можете сделать это и в случае загрузки MainForm. Просто поместите туда свой код, чтобы показать диалог входа в систему.

0 голосов
/ 30 января 2009

примерно немного sleep до вызова mainForm? или OnLoadComplet?

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