Para hacerlo de una mejor manera podemos hacer lo siguiente…
En nuestro proyecto tenemos el Program.cs, el cual es el principal, agregamos un formulario principal [frmPrincipal] y uno de autenticación [frmAutentica] y hacemos lo siguiente:
en Program.cs tenemos un código parecido a este:
1: namespace Comercial
2: {
3: static class Program
4: {
5: /// <summary>
6: /// Punto de entrada principal para la aplicación.
7: /// </summary>
8: [STAThread]
9: static void Main()
10: {
11: Application.EnableVisualStyles();
12: Application.SetCompatibleTextRenderingDefault(false);
13: /*Es en este lugar donde hay que insertar el código que valida el usuario*/
14: Application.Run(new frmPrincipal());
15: }
16: }
17: }
El código que metemos en ese lugar es el que usamos para invocar nuestro formulario de autenticación, en este formulario validamos el usuario y la clave y damos como resultado DialogResult.Ok en caso que la autenticación sea exitosa. además para mantener en Memoria, nombre, id y otros datos del usuario podemos crear una clase que guarde estos datos, y luego invocarla. el código puede ser algo parecido al siguiente:
1: DatosUsuario user = new DatosUsuario();// Aqui se los datos del usuario
2: frmAutentica auth = new frmAutentica();
3: auth.user = user;
4: DialogResult dr;
5: dr=auth.ShowDialog();
6: if (dr == DialogResult.OK)
7: {
8: // En el form frmPRincipal creamos una sobrecarga del constructor para que nos acepte el parametro user
9: Application.Run(new frmPrincipal(user));
10: }
Espero esta contribución les ayude.