1 - не обязательно делать "логин" главной формой. можно стартовать главную форму скрытой, а форму логина дочерней, но показывать раньше, и дальше действовать в зависимости от успешности логина
2 - конкретно в WinForms можно отрабатывать вообще разные формы последовательно
using System;
using System.Windows.Forms;
namespace X
{
internal static partial class Y
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(A = new fmA());
// bla-bla-bla with login
Application.Run(B = new fmB());
}
internal static fmA A;
internal static fmB B;
}
}
3 - для WPF не подскажу, но наверняка оба подхода можно рассмотреть и пробовать искать аналогии
ps для WinForms
Как закрыть главную форму из дочерней?
буквальный ответ -
ни как, закрытие главной формы, это завершение
Application.Run(A = new fmXXX());
и если вы не модифицирутете код
Main
- тогда это завершение программы