Тебе нужно спрятать свой кулак. Вы можете сделать это с помощью this.Hide()
Будьте осторожны с позицией this.Hide()
.
Если вы используете mainForm.Show();
, вы можете разместить его до или после него, но если вы используете mainForm.ShowDialog();
вы можете поместить его только перед ним, так как ShowDialog()
останавливает выполнение кода до тех пор, пока форма, вызвавшая этот метод, не будет закрыта.
С program.cs
вы запускаете свое приложение с Application.Run(YourMainForm)
, так как вы хотите, чтобы ваш LoginForm
был первым при открытии приложения, вы должны создать его внутри Program.cs
и передать его внутрь Application.Run()
следующим образом:
...
LoginForm lf = new LoginForm();
...
Application.Run(lf);
Теперь у нас отображается LoginForm
. Мы не можем закрыть его, так как наше приложение закроется (так как это основная форма)
Поэтому, когда пользователь входит в систему и нажимает кнопку и успешно, мы скрываем нашу основную форму и показываем другую, которую мы хотим, как это:
private void button_OK_Click(object sender, EventArgs e)
{
if (authenticated())
{
MainWindow mw = new MainWindow();
mw.Show();
this.Hide();
}
else
{
MessageBox.Show("Incorrect credentials", "Retail POS", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
Теперь у нас отображается MainForm
, а логин скрыт.
Поскольку вы хотите, чтобы пользователь мог выйти из системы, вы можете сделать это двумя способами:
Сначала когда пользователь нажимает кнопку, мы делаем это:
LoginForm lf = new LoginForm();
lf.Show();
this.Close(); //We assume that button is placed in your main form
Таким образом, мы снова отображаем форму входа в систему (на данный момент у нас есть 2 формы входа в память, основная и новая, которая является пустой тратой памяти) и там пользователь может войти снова. Таким образом, каждый раз, когда пользователь выходит из системы, у вас в памяти появляется еще один LoginForm
, что очень плохо.
Другой эффективный способ заключается в том, что внутри файла Program.cs
мы не создаем LoginForm
экземпляр внутри Main()
функция, но снаружи и пометить его как public static
Это будет выглядеть так:
Program.cs
...
static class Program
{
...
public static LoginForm mainForm;
static void Main()
{
....
mainForm = new LoginForm();
Application.Run(mainForm);
}
}
Теперь, когда у нас есть это и пользователь нажмите Logout
в вашем MainWindow
вы делаете не нужно создавать новый экземпляр LoginForm
, но вы можете просто Show()
существующий (основной) с помощью Program.mainForm.Show()