none
Problemas ao limpar textbox (form: login) / Ajuda. RRS feed

  • Pergunta

  • Bom dia amigos,

    Estou criando um método de validação de login, utilizando um formulário e duas classes, segue abaixo detalhamento; 

    // Formulário Login
    
            #region bt_entrar
            private void bt_entrar_Click(object sender, EventArgs e)
            {
                UsuarioBD usuariobd = new UsuarioBD();
                usuariobd.AcessoUsuario(txt_usuario.Text, txt_senha.Text);
            }
            #endregion
    
    // Classe UsuarioBD
    
    #region AcessoUsuario
            public void AcessoUsuario(string usuario, string senha)
            {
                try
                {
                    FLogin l = new FLogin();
                    //Conecta através da classe de conexão
                    MySqlConnection conn = ConexaoBD.obterConexao();
                    string sql = "select * from usuario where usuario='" + usuario + "' and senha='" + senha + "'";
                    MySqlCommand cmd = new MySqlCommand(sql, conn);
                    MySqlDataReader dr = cmd.ExecuteReader();
                    //Se estiver correto usuario/senha retorna como true
                    if (dr.Read() == true)
                    { l.Acessar(true); }
                    else
                    { l.Acessar(false); }
                }
                catch (MySqlException e)
                { MessageBox.Show(e.Message); }
            }
            #endregion
    
    // Formulário Login (retorno)
    
            #region Acessar
            public void Acessar(bool acesso)
            {
                if (acesso == true)
                {
                    FPrincipal p = new FPrincipal();
                    p.ShowDialog();
                }
                else if (acesso == false)
                {
                    // QUANDO FALSE ELE EXIBE A MENSAGEM, PORÉM NÃO LIMPA OS TEXTBOX's (???)
                    txt_usuario.Text = ""; txt_senha.Text = "";
                    MessageBox.Show("Usuário e/ou senha incorreto(s).", "Aviso do Sistema",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            #endregion

    Minha grande dúvida é, qual motivo ele não está limpando os textbox's? Já quebrei cabeça pra entender, até porque ele exibe o messagebox corretamente, mas não limpa os textbox. 

    Já tentei das seguintes formas:

    txt_usuario.Text = ""; 
    txt_senha.Text = "";
    
    txt_usuario.Text = string.Empty; 
    txt_senha.Text = string.Empty;
    
    txt_usuario.Text = string.IsNullOrEmpty;
    txt_senha.Text = string.IsNullOrEmpty

    Obrigado à todos desde já! 

    OBS: Gostaria de saber de vocês programadores mais experientes, se essa forma de validação de login está muito ruim e se está seguindo uma boa lógica e boa pratica de programação?

    Bom dia! 

    quinta-feira, 26 de julho de 2018 13:51

Respostas

Todas as Respostas

  • quinta-feira, 26 de julho de 2018 19:14
    Moderador
  • Bom dia Welington,

    Preciso de uma solução que se aplique à Windows Form. Não encontrei essa opção nas proriedades do componente. Alguma outra sugestão? Obrigado desde já.

    Att,

    Guilherme.

    sexta-feira, 27 de julho de 2018 11:56
  • você postou no forum de asp.net.

    o que está confundindo ai,  está limpando o textbox da nova janela que, não deu um show, você só instanciou, e não da original. dentro do login você chama outra janela de login, mas essa janela não é exibida, e está achando que está na primeira janela.

    sexta-feira, 27 de julho de 2018 12:21
    Moderador
  • Welington,

    Como deveria fazer essa chamada ?

    Pelo que eu estava interpretando, eu estando no formulário e chamar algo em uma classe, ele iria manter a formulário principal visto que estou buscando informações de uma classe. Teria uma outra forma de fazer essa chamada ? Outra dúvida, porque exibe o messagebox?

    Att,

    sexta-feira, 27 de julho de 2018 12:41
  • public bool AcessoUsuario(string usuario, string senha)
            {
                try
                {
                    //FLogin l = new FLogin();
                    //Conecta através da classe de conexão
                    MySqlConnection conn = ConexaoBD.obterConexao();
                    string sql = "select * from usuario where usuario='" + usuario + "' and senha='" + senha + "'";
                    MySqlCommand cmd = new MySqlCommand(sql, conn);
                    MySqlDataReader dr = cmd.ExecuteReader();
                    //Se estiver correto usuario/senha retorna como true
                    if (dr.Read() == true)
                   { return true; }
                    else
                    { return false; }
                }
                catch (MySqlException e)
                { MessageBox.Show(e.Message); }
            }
    
    
    
     private void bt_entrar_Click(object sender, EventArgs e)
            {
                UsuarioBD usuariobd = new UsuarioBD();
                if(usuariobd.AcessoUsuario(txt_usuario.Text, txt_senha.Text))
                {
                    FPrincipal p = new FPrincipal();
                    p.ShowDialog();
                }
                else
                {
                    txt_usuario.Text = ""; 
                    txt_senha.Text = "";
                    MessageBox.Show("Usuário e/ou senha incorreto(s).", "Aviso do Sistema",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }

    tente assim,

    A o messagebox é exibido porque você chama ele normalmente, ele está dentro da instância do formulário. so que esse formulário você não deu o show nele


    você estava limpando os campos de outro formulario, e não desse que foi preenchido os dados
    sexta-feira, 27 de julho de 2018 12:52
    Moderador
  • public bool AcessoUsuario(string usuario, string senha)
            {
                try
                {
                    //FLogin l = new FLogin();
                    //Conecta através da classe de conexão
                    MySqlConnection conn = ConexaoBD.obterConexao();
                    string sql = "select * from usuario where usuario='" + usuario + "' and senha='" + senha + "'";
                    MySqlCommand cmd = new MySqlCommand(sql, conn);
                    MySqlDataReader dr = cmd.ExecuteReader();
                    //Se estiver correto usuario/senha retorna como true
                    if (dr.Read() == true)
                   { return true; }
                    else
                    { return false; }
                }
                catch (MySqlException e)
                { MessageBox.Show(e.Message); }
            }
    
    
    
     private void bt_entrar_Click(object sender, EventArgs e)
            {
                UsuarioBD usuariobd = new UsuarioBD();
                if(usuariobd.AcessoUsuario(txt_usuario.Text, txt_senha.Text))
                {
                    FPrincipal p = new FPrincipal();
                    p.ShowDialog();
                }
                else
                {
                    txt_usuario.Text = ""; 
                    txt_senha.Text = "";
                    MessageBox.Show("Usuário e/ou senha incorreto(s).", "Aviso do Sistema",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }

    tente assim,

    A o messagebox é exibido porque você chama ele normalmente, ele está dentro da instância do formulário. so que esse formulário você não deu o show nele

    Welington,

    Veja a mensagem ao tentar implementar;

    sexta-feira, 27 de julho de 2018 13:00
  • você alterou o retorno para bool?
    sexta-feira, 27 de julho de 2018 13:03
    Moderador
  • você alterou o retorno para bool?
    Onde devo fazer essa alteração Welington? Obrigado!
    sexta-feira, 27 de julho de 2018 13:13
  • no método AcessoUsuario olha o exemplo que eu colei acima
    sexta-feira, 27 de julho de 2018 13:15
    Moderador
  • no método AcessoUsuario olha o exemplo que eu colei acima

    Deu zika amigo;


    sexta-feira, 27 de julho de 2018 13:22
  • por causa do try/catch, tinha me esquecido

    coloca um return false dentro dele

     catch (MySqlException e)
                { 
                 MessageBox.Show(e.Message);
                 return false;
                }


    sexta-feira, 27 de julho de 2018 13:28
    Moderador
  • por causa do try/catch, tinha me esquecido

    coloca um return false dentro dele

     catch (MySqlException e)
                { 
                 MessageBox.Show(e.Message);
                 return false;
                }


    Show! Muito obrigado Welington!
    sexta-feira, 27 de julho de 2018 13:36