Как закрыть форму входа и показать основную форму без закрытия приложения? - PullRequest
41 голосов
/ 21 января 2011

В моем проекте есть две формы (Логин и Главная).

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

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

public void ShowMain()
{
    if(auth()) // a method that returns true when the user exists.
    {             
        var main = new Main();
        main.Show();
        this.Close();
    }
    else
    {
        MessageBox.Show("Invalid login details.");
    }         
}

Я попытался скрыть форму входа, если процесс входа прошел успешно. Но это беспокоит меня, потому что я знаю, что когда моя программа работает, форма входа еще там, она должна быть закрыта, верно?

Каким должен быть правильный подход к этому? Спасибо ...

Ответы [ 14 ]

0 голосов
/ 30 ноября 2011
public void ShowMain()
  {
       if(auth()) // a method that returns true when the user exists.
       {        
         this.Hide();
         var main = new Main();
         main.Show();
       }
      else
       {
              MessageBox.Show("Invalid login details.");
        }         
   }
0 голосов
/ 21 января 2011

Попробуйте это:

public void ShowMain()
    {
        if(auth()) // a method that returns true when the user exists.
        { 
            this.Close();
            System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(Main));
            t.Start();
        }
        else
        {
            MessageBox.Show("Invalid login details.");
        }         
    }
   [STAThread]
   public void Main()
   {
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      Application.Run(new Main());

   }

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

Один совет: эта система крайне небезопасна, потому что вы можете изменить условие if (в MSIL), и это «детская игра» для передачи вашей безопасности.Вам нужна более сильная система для защиты вашего программного обеспечения, такая как запутанный или удаленный вход в систему или что-то вроде этого.

Надеюсь, это поможет.

0 голосов
/ 21 января 2011

Я думаю, что гораздо лучший метод - это сделать это в файле Program.cs, где у вас обычно есть Application.Run (form1). Таким образом, вы получаете более чистый подход. Форма входа не должна быть связана с формой Main., вы просто показываете логин, и если он возвращает true, вы отображаете основную форму, в противном случае ошибка.

0 голосов
/ 21 января 2011

Вы должны сделать это наоборот:

Сначала загрузите mainform и в его событии onload покажите свой loginform с showdialog(), который будет препятствовать отображению mainform, пока не будет получен результат из loginform

EDIT : Так как это форма login , и если вам не нужны переменные из mainform (, что на практике является плохим дизайном ), вы должны действительно реализовать это в своей программе. как предположили Дэвид и Коди.

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