Я действительно не рекомендую использовать этот подход, когда несколько Application.Run
используются один за другим для отображения последовательных форм. Этот метод запускает основное сообщение l oop программы и обычно запускается один раз при запуске программы и возвращается только один раз при выходе из программы.
Вместо этого заставьте формы открывать друг друга по мере необходимости и оставить главное сообщение l oop в одиночку. Давайте изменим его, чтобы вернуться в состояние почти по умолчанию:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Open the initial formm I'm assuming it's the login
LoginForm loginForm = new LoginForm();
loginForm.Show();
//Start the main message loop for the whole lifetime of the program
Application.Run();
}
Теперь в форме входа, когда пришло время закрыть ее и запустить основную форму, она сделает это сама вместо делегирования:
//Close itself
this.Close();
//Launch the next form
DashboardForm dashboardForm = new DashboardForm();
dashboardForm.Show();
Точно так же на панели управления при выходе вам нужно будет перезапустить вход в систему:
//Close itself
this.Close();
//Show the login again
LoginForm loginForm = new LoginForm();
loginForm.Show();
Хотя все это работает, это создает проблему, которой раньше не было. Поскольку основной Application.Run
не привязан к форме, он не перестанет работать после того, как будет выполнен первоначальный вход в систему, а только тогда, когда будет явно указано это сделать, с результатом net зависания процесса после закрытия окна. .
Чтобы исправить это, когда пришло время закрыть приложение навсегда (не запускать другую форму), позвоните Application.Exit();
, возможно, в событии Form.Closing
.