Две разные формы окна в C # - PullRequest
2 голосов
/ 25 декабря 2008

Я новичок в программировании на C # и .NET. Я хочу создать приложение, которое открывается с небольшим экраном входа в систему, и когда пользователь нажимает кнопку «Вход», моя программа должна закрыть форму входа и перейти к новой форме. Как я могу достичь этого простого процесса?

Спасибо.

Ответы [ 4 ]

9 голосов
/ 25 декабря 2008

Это может быть решением;

В LoginForm;

public bool IsLoggedIn { get; private set;}
public void LoginButton_Click(object sender, EventArgs e)
{
  IsLoggedIn = DoLogin();
  if(IsLoggedIn)
  {
    this.Close()
  }
  else
  {
    DoSomethingElse();
  }
}

В программе.cs

static void Main()
{
  Application.EnableVisualStyles();
  Application.SetCompatibleTextRenderingDefault(false);
  LoginForm loginForm = new LoginForm();
  Application.Run(loginForm);
  if (loginForm.IsLoggedIn)
  {
    Application.Run(new OtherForm());
  }
}
2 голосов
/ 25 декабря 2008

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

    //Program.cs:
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm());
    }

    //MainForm.cs
    private void MainForm_Load(object sender, EventArgs e)
    {
        this.Hide();
        Login login = new Login();
        if (login.ShowDialog() == DialogResult.OK)
        {
            //make assignments from login
            currentUser = login.User;
        }
        else
        {
            //take needed action
            Application.Exit();
            return;
        }
    }
0 голосов
/ 26 декабря 2008

Если вы используете .ShowDialog (), не забудьте обернуть его вокруг используемого блока или использовать .Dispose в форме входа после того, как вы закончите. Диалоги моделей должны быть расположены вручную.

0 голосов
/ 25 декабря 2008

Сложность заключается в том, какую форму вы передаете методу Application.Run (). Если вы запустите приложение с экземпляром формы входа в систему, а затем закроете эту форму, я думаю, что приложение закроется. Без сомнения, есть несколько способов справиться с этим ...

Один из способов - передать экземпляр вашей основной формы в метод Application.Run (это связывает цикл сообщений с этим экземпляром формы, а не с формой входа в систему). В методе OnLoad главной формы вы можете использовать модальное диалоговое окно для входа в систему. т.е.

//--Main form's OnLoad method
protected override void OnLoad(EventArgs ea)
{
    // Remember to call base implementation
    base.OnLoad(ea);

    using( frmLogin frm = new frmLogin() )
    {
        if( frm.ShowDialog() != DialogResult.OK )
        {
            //--login failed - exit the application
            Application.Exit();
        }
    }       
}
...