Ajuda para criar tela de login

.NET

22/01/2014

Olá, gente.
Estou criando uma aplicação que terá uma tela de login assim que for aberta. Se o usuário fizer login corretamente, então abre o form principal.
Porém, estou com dificuldade para abrir o form principal e fechar o de login.
Testei de duas formas (esse código é executado se o login for feito corretamente):

1) Assim o form principal abre, mas o de login fica por trás, muito chato.
FormPrincipal frm = new FormPrincipal();
frm.Show();


2) Assim era pra fechar o form de login, mas a aplicação toda é fechada.
FormPrincipal frm = new FormPrincipal();
frm.Show();
Close();


Alguém poderia me dar uma luz? Pois essa é a primeira aplicação com login que eu desenvolvo.

Grata.
Rachel Andrade

Rachel Andrade

Curtidas 0

Respostas

Jair Souza

Jair Souza

22/01/2014

Olá, na realidade em nenhum dos dois você menciona o form do login...

tenta assim :

FormPrincipal frm = new FormPrincipal();
            this.Visible = false;
            frm.Show();


ou assim :

FormPrincipal frm = new FormPrincipal();
              this.Hide();
              frm.Show();


GOSTEI 0
Rachel Andrade

Rachel Andrade

22/01/2014

Oi, Jair. Obrigada pela atenção.

O form de login, no caso, é onde fica esse código. Por exemplo, o Close do segundo exemplo é do próprio form de login.

Testei aqui os exemplos e o form de login ficou oculto realmente, é assim que eu quero. Só que observei que quando fecho o form principal, a aplicação não é encerrada, ela fica rodando. Sabe dizer por que?

Grata.
GOSTEI 0
Jair Souza

Jair Souza

22/01/2014

Oi, no form principal coloque :

private void FormPrincipal_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }


GOSTEI 0
Raniel Gomes

Raniel Gomes

22/01/2014

Olha como eu fiz em um projetinho:

Código botão entrar tela de login:

Que acontece eu deixo a propriedade "Enabled" do formulário principal como "False" .

private void btnEntrar_Click(object sender, EventArgs e)
        {
            
            try
            {
               //Se for verdadeiro cria uma nova Instância da tela de login
                clsLogin login = new clsLogin();
               //Cria uma nova instância da tela principal
                frmPrincipal p = new frmPrincipal();
                login.Usuario = txtUsuario.Text;
                login.Senha = txtSenha.Text;
                clsBanco.login(login, p);
                p.Label(txtUsuario.Text);

                if (p.Enabled == true)
                {
                    //Muda a propriedade do Form(Principal) para enabled 
                    Visible = false;
                }
            }

            catch (Exception erro)
            {
                MessageBox.Show("Erro de conexão com banco de dados" + erro.Message, "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Question);
            }
        }


Qualquer dúvida pode postar aqui.
GOSTEI 0
Raniel Gomes

Raniel Gomes

22/01/2014

Esqueci de postar o resto do código rsrs, minha camada de Banco:

public static void login (clsLogin log, frmPrincipal principal)
        {
            using(MySqlConnection conexaoMySQL = clsBanco.getInstancia().getConexao())
            {
                try
                {
                    
                    string mSQL = "SELECT count(*) FROM FUNCIONARIOS WHERE USUARIO=@usuario AND SENHA=@senha";
                    MySqlCommand cmd = new MySqlCommand(mSQL, conexaoMySQL);
                    cmd.Parameters.AddWithValue("@usuario",log.Usuario);
                    cmd.Parameters.AddWithValue("@senha", log.Senha);
                    conexaoMySQL.Open();
                    
                    int i = Convert.ToInt16(cmd.ExecuteScalar());

                    if (i > 0)
                    {
                        principal.Enabled = true;
                        principal.Show();
                    }
                    else
                    {
                        MessageBox.Show("Usuario/Senha estão inválidos.", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Question);
                    }

                    }
                catch (FbException ex)
                {
                    throw ex;
                }
                finally
                {
                    conexaoMySQL.Close();
                }
            }
        }
GOSTEI 0
Rachel Andrade

Rachel Andrade

22/01/2014

Oi, no form principal coloque :

private void FormPrincipal_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }


Obrigada, Jair. Assim deu certo.
GOSTEI 0
Rachel Andrade

Rachel Andrade

22/01/2014

Raniel, muito obrigada pelos exemplos, serão muito úteis aqui. Vou estudar e adaptar para o meu sistema.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/01/2014

Uma outra forma é você ter o form principal como primeiro da sua aplicação, assim, quando ele for fechado, a aplicação é encerrada.
Ao abrir o form principal, você exibe a tela de login, que tratará as credenciais e, se o login for feito, essa tela é fechada, dando vez à tela principal.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/01/2014

Nesse formato, o FormPrincipal seria realmente o principal da aplicação (configurado lá no Program.cs) e o seu evento load seria mais ou menos assim:
private void FormPrincipal_Load(object sender, EventArgs e)
{
    this.Hide();
    using(FormLogin frm = new FormLogin())
    {
        if(frm.ShowDialog() == DialogResult.OK)
        {
            this.Show();
        }
        else
        {
            this.Close();
        }
    }
}


E no FormLogin, no botão "Entrar", teria algo semelhante a isso:
            if(LOGIN FEITO)
            {
                this.DialogResult = DialogResult.OK;
            }
            else
            {
                MessageBox.Show("Dados incorretos.");
            }


E em um botão "Cancelar", no form de login, bastaria definir o DialogResult como Cancel, que ele voltaria para o FormPrincipal e este seria fechado:
this.DialogResult = DialogResult.Cancel;
GOSTEI 0
Raniel Gomes

Raniel Gomes

22/01/2014

Raniel, muito obrigada pelos exemplos, serão muito úteis aqui. Vou estudar e adaptar para o meu sistema.


BLZ DISPONHA....
GOSTEI 0
Jair Souza

Jair Souza

22/01/2014

Oi, no form principal coloque :

private void FormPrincipal_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }


Obrigada, Jair. Assim deu certo.


Fico muito contente em ter ajudado.
GOSTEI 0
Rachel Andrade

Rachel Andrade

22/01/2014

Obrigada, Joel Rodrigues. Testei aqui essa forma e também deu certo.
São muitas formas de fazer uma mesma coisa, isso é muito bom, pois nos dá a liberdade de avaliar, escolher e decidir qual é a que mais se adequa às nossas necessidades.
Obrigada a todos. Por favor, podem finalizar esse tópico.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/01/2014

Fico feliz por ter contribuído de alguma forma.
Estou marcando o tópico como concluído.
GOSTEI 0
POSTAR