2010-08-17 23 views
7

Tengo problemas para ocultar mi formulario principal para un formulario de inicio de sesión. Una vez que el usuario ha iniciado sesión para cerrar el formulario de inicio de sesión y mostrar el formulario principal.C# ejemplos de inicio de sesión

Me he estado confundiendo tanto que he borrado todo el código y empecé de nuevo. Puedo ocultar el formulario de inicio de sesión correctamente.

he podido ocultar el formulario principal llamado con

Application.Run(new MainForm()); 

Formulario de acceso tiene el siguiente aspecto:

namespace WindowsFormsApplication1 
{ 
    public partial class LoginForm : Form 
    { 
     public LoginForm() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      string username; 
      string password; 

      username = TB_username.Text; 
      password = TB_password.Text; 

      if (User.Login(username, password)) 
      { 
       Globals._Login = true; 

       // Close login form 
       this.Dispose(false); 

      } 
      else 
      { 
       MessageBox.Show("Login Failed"); 
      } 

     } 
    } 
} 

me puedo imaginar cómo ocultar a continuación, mostrar la forma principal una vez entrada ha pasado .

Gracias ningún ejemplo serían grandes

+0

¿Qué ocurre cuando se llama "Hide()" en el MainForm? – Blam

+0

No relacionado, pero considere usar 'SecureString' en lugar de' String' para la parte de la contraseña del inicio de sesión. – JaredPar

Respuesta

20
  1. Uso ShowDialog() para abrir el formulario de acceso. Entonces no necesita ocultar o deshabilitar la forma principal usted mismo. De hecho, si desea que el formulario de acceso a aparecer al inicio de la aplicación, considere mostrar que, incluso antes de cargar el Mainform:

    static void Main() 
    { 
        Application.SetCompatibleTextRenderingDefault(false); 
        Application.EnableVisualStyles(); 
        DialogResult result; 
        using (var loginForm = new LoginForm()) 
         result = loginForm.ShowDialog(); 
        if (result == DialogResult.OK) 
        { 
         // login was successful 
         Application.Run(new Mainform()); 
        } 
    } 
    
  2. Dentro de su formulario de acceso, en button1_Click, utilice

    DialogResult = DialogResult.OK; 
    

    para cerrar el formulario de inicio de sesión y pasar el resultado OK a la forma principal. No es necesario Dispose().

+0

Gracias funcionó una delicia. – Joe

+0

¿Alguien puede explicar cómo obtendré los detalles del usuario en la forma principal? – Sribin

0

Utilice la función ShowDialog() en el formulario de acceso para cargar el formulario de acceso desde el interior de la forma principal de la aplicación. Esto evitará que MainForm se muestre hasta después de que el LoginForm haya finalizado.

private void MainForm_Load(object sender, EventArgs e) { 
    var loginForm = new LoginForm(); 
    loginForm.ShowDialog(); 
} 
1

Así que ... Aquí está mi nombre de usuario :) Te puede gustar o no me gusta, pero entonces ... Esta es mi solución.

private void FRIIB_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      QueryBuilder.insql = Crypto.DecryptStringAES(Model.DecryptRegisteryValue("inSQL"), "inSQL"); 
     } 
     catch (Exception exc) 
     { 
      MessageBox.Show(exc.Message); 
     } // getting connection string 
     if (!(new Func<bool>(() => 
       { 
        Func<bool> l = null; l =() => 
        { 
         using (LoginForm loginDialog = new LoginForm()) 
         { 
          loginDialog.ShowDialog(); 
          loginDialog.Focus(); 
          if (loginDialog.IsExit) return false; 
          else 
           if (loginDialog.IsAuthorized) return true; 
           else return l(); 
         } 
        }; return l(); 
       } 
      )() 
      )) Close(); 
     else w8(() => LoadData()); 
    } 

y aquí es un poco de descripción de código:

private void w8(Action action) 
    { 
     Cursor.Current = Cursors.WaitCursor; 
     Application.DoEvents(); 
     action(); 
     Cursor.Current = Cursors.Default; 
    } 

Public Class DamnLogin 
    Private db As FRIIB 

    Public Sub New(ByVal connection As String) 
     db = New FRIIB(connection) 
    End Sub 

    Public Function Login(ByVal name As String, ByVal password As String) As Boolean 
     Dim GetUser = _ 
      From u In db.GetTable(Of [User])() _ 
      Where u.Name = name _ 
      And u.Password = password _ 
      Select u 
     Return GetUser.Count = 0 
    End Function 
End Class 

let Login usename password = 
    new LinqBase.DamnLogin(insql) |> fun damn -> 
     not <| damn.Login(usename,password) 

y login forma

public partial class LoginForm : Form 
{ 
    bool isAuthorized; 
    bool exit; 

    public bool IsAuthorized { get { return this.isAuthorized; } } 
    public bool IsExit   { get { return this.exit;   } } 

    public LoginForm() 
    { 
     isAuthorized = false; 
     exit   = false; 

     InitializeComponent(); 
    } 

    private void Close_Click(object sender, EventArgs e) 
    { 
     exit = true; 
     this.Close(); 
    } 

    private void LoginButton_Click(object sender, EventArgs e) 
    { 
     if (Login.Text != "") 
     { 
      if (Login.Text.ToUpper() == "ADMIN") 
      { 
       if (Password.Text == Crypto.DecryptStringAES(Model.DecryptRegisteryValue("Password"), "Password")) 
        isAuthorized = true; 
      } 
      else 
      { 
       if (QueryBuilder.Login(Login.Text, Password.Text)) 
        isAuthorized = true; 
      } 
     } 

     this.Close(); 
    } 
} 
Cuestiones relacionadas