Ajuda para criar tela de login

22/01/2014

0

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

Responder

Posts

22/01/2014

Jair Souza

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();


Responder

22/01/2014

Rachel Andrade

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.
Responder

23/01/2014

Jair Souza

Oi, no form principal coloque :

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


Responder

23/01/2014

Raniel Gomes

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.
Responder

23/01/2014

Raniel Gomes

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();
                }
            }
        }
Responder

23/01/2014

Rachel Andrade

Oi, no form principal coloque :

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


Obrigada, Jair. Assim deu certo.
Responder

23/01/2014

Rachel Andrade

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

23/01/2014

Joel Rodrigues

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.
Responder

23/01/2014

Joel Rodrigues

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;
Responder

23/01/2014

Raniel Gomes

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


BLZ DISPONHA....
Responder

23/01/2014

Jair Souza

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.
Responder

23/01/2014

Rachel Andrade

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.
Responder

23/01/2014

Joel Rodrigues

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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar