Mira como yo lo hago
En el metodo Main()
Código:
frmLogin frmLogin = new frmLogin();
frmLogin.ShowDialog();
if (frmLogin.DialogResult == DialogResult.OK)
{
Application.Run(new frmMain());
}
En el botón Aceptar del formulario de login, algo como esto
Si el usuario existe:
DialogResult = DialogResult.OK;
De lo contrario
DialogResult = DialogResult.No;
La clave esta en esas dos lineas, lo que retorne el login es lo que hace el cambio del formulario en el metodo Main().
Espero sea claro lo que trato de mostrar
Saludos