Windows Forms: создать главное приложение после входа в систему, какую форму запустить? - PullRequest
7 голосов
/ 27 октября 2009

Использование Windows Forms Я хотел бы иметь небольшой экран входа в систему, через который пользователь авторизуется (скажем, его Form1), поэтому основное приложение (скажем, его Form2) будет открыто после входа в систему. Но я полагаю, когда я использую Application.Run (Form1), после закрытия все приложение закрывается.

Есть ли другой способ, кроме использования невидимой формы 2? Что-то вроде запуска Form2 по требованию и закрытия изначально запускаемого Form1? Надеюсь, это имеет смысл для вас:)

Ответы [ 5 ]

10 голосов
/ 27 октября 2009

Создайте перегрузку System.Windows.Forms.ApplicationContext, сначала создайте Form1, а затем Form2 в его конструкторе.

Использовать Application.Run перегрузку, которая принимает ApplicationContext объект.

5 голосов
/ 27 октября 2009

Класс ApplicationContext - это то, что вам нужно. Вы можете вызвать перегрузку Application.Run(ApplicationContext).

См. Здесь пример: http://msdn.microsoft.com/en-us/library/system.windows.forms.applicationcontext.aspx

4 голосов
/ 27 октября 2009

Вы можете вызвать свою форму аутентификации перед запуском основной формы приложения в Program.cs (имя по умолчанию), например:

    static void Main()
    {
        Form1 f1 = new Form1();
        DialogResult dr = f1.ShowDialog();
        if (dr == DialogResult.OK)
        {
            Application.Run(new Form2());
        }
        else
        {
            Application.Exit();
        }
    }

Внутри Form1, если они правильно аутентифицируются, вам просто нужно закончить:

    this.DialogResult = DialogResult.OK;
    this.Close();

Если аутентификация не удалась, вы можете позволить им повторить попытку аутентификации, дать им максимальное количество попыток и т. Д. Затем, когда вы решите, что у них слишком много, просто позвоните

    Application.Exit();
0 голосов
/ 20 апреля 2013

Попробуйте использовать настройки в свойствах проекта

  1. Перейти к свойствам проекта
  2. Перейдите на вкладку настроек и создайте настройку 'lcheck' типа bool и значением 'false'
  3. Пусть form1 - это основная форма, а form2 - форма входа
  4. Используйте цикл while в функции form1 - formload, например

    while(System.properties.default.lcheck!=true)
    {
        authentication process:
    }
    

Примечание: у меня есть сомнения по поводу этого процесса. Кто-то может изменить настройки из папки приложения в приложении.

0 голосов
/ 27 октября 2009

Попробуйте этот подход. Из основной строки вашей программы создайте свой основной класс формы, внутри этого класса есть функция "go", которая вызывает форму входа в систему. Если эта функция возвращает true, вы можете продолжить вызов Application.Run (форма).

MainForm form = new MainForm();
form.Show();
if (form.go())
{
  Application.Run(form);
}
else
{
  form.Close();
}

class MainForm 
{
  public bool go()
  {
    LoginFrom lf = new LoginForm()
    if (lf.ShowDialog() != DialogResult.OK)
    {
      return false;
    }
  }
}

Возможно, немного упрощенно, но это должно привести вас в правильном направлении.

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