Deseche el formulario de inicio de sesión y muestre el formulario principal después de ingresar el nombre de usuario y la contraseña en el formulario de inicio de sesión

Ejecuto LoginForm usando el siguiente código:

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new LoginForm());
    //Application.Run(new MainForm());
}

Cuando el usuario presiona el botón Intro, quiero desechar o cerrar el formulario de inicio de sesión y quiero ejecutar el formulario principal, pero obtuve esta excepción: "InvalidOperationException no fue manejada por el código de usuario"

El controlador de clic del botón Intro se proporciona a continuación:

private void LoginFormEnterButton_Click(object sender, EventArgs e)
{
    try
    {
        MainForm a = new MainForm();
        a.Show();
        this.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

¿Qué puedo hacer para desechar el formulario de inicio de sesión y luego ejecutar el formulario principal con éxito?

preguntado el 12 de junio de 12 a las 13:06

4 Respuestas

No puede deshacerse de la ventana principal. Necesitas cambiar el camino.

En primer lugar, establezca MainForm como ventana de inicio.

Application.Run(new MainForm());

Cargue/muestre el formulario de inicio de sesión en el constructor de MainForm,

public MainForm()
{
 LoginForm login=new LoginForm();
 login.ShowDialog();
 InitializeComponent();
}

y haga clic en el código del controlador en LoginForm,

private void LoginFormEnterButton_Click(object sender, EventArgs e)
{
   this.Close();
}

Respondido el 12 de junio de 12 a las 13:06

¿Suele utilizar este método al desarrollar aplicaciones? - r.hamd

Creo que el ciclo principal de la aplicación finaliza cuando cierra el formulario de inicio de sesión. Como alternativa, ¿podría ejecutar la aplicación con su formulario principal y hacer que muestre el formulario de inicio de sesión como un cuadro de diálogo modal? Luego, si el usuario no inicia sesión correctamente, puede cerrar la aplicación

Respondido el 12 de junio de 12 a las 13:06

Creo que deberías cambiar tu enfoque.

Comience a ejecutar su formulario principal.
En el evento Cargar del formulario principal, ejecute el formulario de inicio de sesión modalmente
Realice la validación dentro del formulario de inicio de sesión y devuelva DialogResult.OK.
En el formulario principal, continúe o salga según el retorno del formulario de inicio de sesión.

[STAThread] 
static void Main() 
{     
    Application.EnableVisualStyles();     
    Application.SetCompatibleTextRenderingDefault(false);     
    Application.Run(new MainForm()); 
} 

public void MainForm_Load(object sender, EventArgs e)
{
     // The using statement will take care of closing and disposing the login form
     using(LoginForm f = new LoginForm())
     {
         if(f.ShowDialog() != DialogResult.OK)
         {
              Application.Exit();
              return;
         }
     }

     // continue with main form processing
}

Respondido el 12 de junio de 12 a las 14:06

Hola, es razonable, pero ¿qué puedo hacer si no quiero usar un cuadro de diálogo? - sanchop22

Lo siento, no lo entiendo. El inicio de sesión debe ser una operación muy sensible. Sin un formulario modal, su procesamiento continuará y ¿cómo podría verificar las operaciones realizadas por el usuario actual no identificado? - Steve

Yo uso un ApplicationContext en lugar de pasar un formulario.

   Application.Run(new TerminalApplicationContext());

en el ctor muestro un formulario

public TerminalApplicationContext()
{
    login = new FormLogin();
    login.Logon += new FormLogin.LogonDelegate(login_Logon);
    login.Show();
}

Luego, en el delegado 'login_logon', desecho el 'FormLogin' y muestro otro.

Respondido el 12 de junio de 12 a las 14:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.