2012-01-23 9 views
8

En mi programa de muestro una forma de inicio de sesión antes de que el formulario principal, una vez que el programa detecta un inicio de sesión correcto uso este:C# La apertura de una nueva forma y cerrar el otro

MainForm Main = new MainForm(); 
Main.Show(); 
this.Hide(); 

Esto funciona bien, pero no es un problema, el formulario de inicio de sesión aún está abierto aunque esté oculto, por lo tanto, cuando el programa se cierra, el proceso aún se bloquea, ¿cómo puedo evitar que esto suceda?

Lo sentimos, se olvidó de agregar, utilizando this.Close(); no funciona y cerrará completamente el programa.

+0

tratar this.close() –

Respuesta

8

Debe especificar su MainForm cuando mira la aplicación y en el controlador de eventos Load de este formulario, solicite el inicio de sesión. En este caso, tendrá que runned aplicación y Login de la partida:

Program.cs

Application.Run(new MainForm()); 

MainForm.cs

private void Form1_Load(object sender, EventArgs e) 
    { 
     LoginForm loginForm = new LoginForm(); 
     if (loginForm.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 
      // check login here 
     } 
    } 

P. S. Close cerrará su aplicación por completo si es la forma principal de su aplicación.

+1

Si oculta en MainForm es la carga antes de mostrar el formulario de inicio de sesión, reproducirá más de cerca la funcionalidad del usuario de abrir el formulario de inicio de sesión. – Servy

-1

¿Qué tal this.Close() en su lugar?

1

Cambie el formulario principal para que sea MainForm, y cuando la aplicación se inicie, en su MainForm_Load inicie el formulario de inicio de sesión como un cuadro de diálogo, para que no puedan acceder al formulario principal.

  • Si tiene que ser capaz de cerrar la aplicación desde el formulario de acceso, utilizar Application.Exit(0);
  • Si no quiere que se vea la forma principal de búsqueda y anular SetVisibilityCore y llamarlo dentroMainForm_Load.
10

Intente algo más a esto:

this.Hide(); 
Main.ShowDialog(); 
this.Close(); 

desea ocultar el formulario de inicio de sesión antes de mostrar el cuadro de diálogo, a continuación, cierre el formulario de inicio de sesión después de que el diálogo se ha cerrado.

Simplemente cerrar el cuadro de diálogo de inicio de sesión finalizará la aplicación, por lo que no es una solución real, pero aún desea ocultar el inicio de sesión.

En pocas palabras, coloque las cosas en el orden en que desea que entren, especialmente cuando se trata de bucles de mensajes.

Primero, oculta el formulario de inicio de sesión.
A continuación, muestra el diálogo de formulario principal, pero impide que la persona que llama de "ShowDialog()" continúe hasta que se cierre el cuadro de diálogo.
Por último, una vez que se cierra el cuadro de diálogo, cierra el formulario de inicio de sesión y finaliza la aplicación.

1

Se puede utilizar para especificar ApplicationContext.MainForm principal forma actual de la aplicación:

static class Program 
{ 
    public static ApplicationContext Context { get; set; } 

    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     Context = new ApplicationContext(new LoginForm()); 
     // pass Context instead of just new LoginForm() 
     Application.Run(Context); 
    } 
} 

después en manejador de entrada:

private void login_Click(object sender, EventArgs e) 
{ 
    Program.Context.MainForm = new MainForm(); 

    // close login form 
    this.Close(); 

    // set up context to track main form instead of login 
    Program.Context.MainForm.Show(); 
} 
Cuestiones relacionadas