none
Definição de campos obrigatórios não estão funcionando! - C# RRS feed

  • Pergunta

  • Olá galera.. bem é o seguinte! criei um método que me informa na hora que eu disparo o evento click do botão gravar, qual campo é obrigatorio!! desse jeito

    public void CamposObrig() /// DEFINE NO ATO DE APERTAR "GRAVAR" QUAIS CAMPOS SÃO OBRIGATORIOS
            {
                if (TXT_Codigo.Text == string.Empty)
                {
                    MessageBox.Show("Campo (Código Cidade) deve ser preenchido", "TechSIS Informação", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    TXT_Codigo.Select();
                    return;
                }
                if (TXT_Descrição.Text == string.Empty)
                {
                    MessageBox.Show("Campo (Descrição) deve ser preenchido", "TechSIS Informação", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    TXT_Descrição.Select();
                    return;
                }

    Beleza.. MAIS NÃO TA FUNCIONANDO kkkkkk

    O que ta acontecendo? bom, até que a mensagem de warning aparece... porem, o focus não vai para o textbox que eu informei.. a aplicação simplismente continua rodando (O sistema não espera eu informar um valor no textbox antes de continuar)

    E o mais estranho, é que se eu pegar esses comandos, e colocar no evento Click do botão GRAVAR, ai funciona!

    Mais se eu criar esse metodo, e informar  CamposObrig() no evento Click do botão GRAVAR não funciona!

    Não sei o que é isso

    Obrigado pela atenção!



    sábado, 11 de fevereiro de 2012 22:15

Todas as Respostas

  • Thiago,

    Tenta colocar Focus() ao invés de Select():

    TXT_Codigo.Focus();

    []s,


    Carlos dos Santos
    blog: www.carloscds.net 
    twitter: @cdssoftware

    sábado, 11 de fevereiro de 2012 23:05
  • Carlos.. Erro continua!

    if (TXT_Codigo.Text == string.Empty)
                {
                    MessageBox.Show("Campo (Código Cidade) deve ser preenchido", "TechSIS Informação", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    TXT_Codigo.Focus();
                    return;
                }
    sábado, 11 de fevereiro de 2012 23:14
  • Thiago eu faria uma modificação na sua lógica, faria o seguinte caso algum controle preciesse ser preenchido este método irá retornar um booleano com valor FALSE, 

    no método que o chama, você somente irá passar para a próxima linha caso este método verificador retorne um TRUE


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Se for útil marque como resposta e faça um Developer feliz :)

    • Sugerido como Resposta RafaChoks segunda-feira, 13 de fevereiro de 2012 12:05
    segunda-feira, 13 de fevereiro de 2012 11:06
    Moderador
  • Bom dia amigo

    Como nosso amigo Olavo disse vc precisa retornar um valor boolean false para que a validação funcione, do contrário estará sendo tudo como true e não vai funcionar.

    Um abraço!


    Rafael Soares Desenvolvedor Web (Java,.NET) Desenvolvedor Mobile(Windows Phone 7, Android)

    segunda-feira, 13 de fevereiro de 2012 12:06
  • Não deu certo

    public bool CamposObrig() /// DEFINE NO ATO DE APERTAR "GRAVAR" QUAIS CAMPOS SÃO OBRIGATORIOS
            {
                if (TXT_Codigo.Text == string.Empty)
                {
                    MessageBox.Show("Campo (Código Cidade) deve ser preenchido", "TechSIS Informação", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    TXT_Codigo.Focus();
                    return true;
                }

    é isso mesmo? kkk

    terça-feira, 14 de fevereiro de 2012 00:53
  • Amigo, boa noite.
    Pelo jeito não deve ser páginas e sim um formulário Windows que está usando.

    Seguindo seu raciocinio, imagine um formulário com dois TextBoxes, txtNome e txtSobrenome.
    É claro que há diversas possíveis lógicas de verificação para verificar se campos obrigatórios foram preenchidos e também se o conteúdo está no formato desejado. Um possível método de verificação seria:

    /// <summary>
    /// Confirma se os campos obrigatorios foram preenchidos corretamente.
    /// Retorna True caso estejam todos preenchidos.
    /// </summary> 
    private bool isCamposObrigatoriosPreenchidos() {
       // CAMPO NOME
       string strNome = txtNome.Text.Trim(); // O método Trim() remove espaços em branco
       if (strNome.Equals(string.IsNullOrEmpty)) {
          MessageBox.Show("O campo Nome é obrigatório!"); 
          txtNome.Focus(); // define o foco do cursor
          return false; // retorna false - que no caso, houve um erro!
       }
       // CAMPO NOME
       string strSobrenome = txtSobrenome.Text.Trim(); // O método Trim() remove espaços em branco
       if (strSobrenome.Equals(string.IsNullOrEmpty)) {
          MessageBox.Show("O campo Sobrenome é obrigatório!"); 
          txtSobrenome.Focus(); // define o foco do cursor
          return false; // retorna false - que no caso, houve um erro!
       }
    
       return true; // Caso nao haja erros, retorna TRUE (ok)
    }

     

    Veja que eu utilizei o string.isNullOrEmpty para avaliar se a String é nula ou está vazia.
    Mas você também pode usar strNome.equals("") que funciona.

    Já vi muitos programadores usarem:

    if (txtNome.Text.Trim().Length < 1) return false; 

    No exemplo acima, usamos a propriedade Length que contem a quantidade de elementos na array que compoe a String.

    Se o conteúdo da String for "maria", veja que contem 5 elementos (caracteres).

    Caso sua aplicações/desenvolvimento esteja voltado para Web, aconselho ver a documentação do MSDN em português sobre RequiredFieldValidator:
    http://msdn.microsoft.com/pt-br/library/system.web.ui.webcontrols.requiredfieldvalidator.aspx
    Também:
    http://support.microsoft.com/kb/313044/pt-br<//a>

    Lembre-se que além de verificar se os campos estão preenchidos, possívelmente você deverá verificar a integridade dos dados, definindo uma máscara padrão.

    Exemplos de informações que utilizadam máscaras são telefones, CEP, e-mail, CEP.
    Espero ter ajudado!


    .NET/Java/ etc - O importante é atingir o resultado, não me interessa a tecnologia!

    terça-feira, 14 de fevereiro de 2012 04:46
  • Terra.. fiz dessa maneira, porem o return continua sendo ignorado!

    string strCodigo = TXT_Codigo.Text;
                if (strCodigo == string.Empty)
                {
                    MessageBox.Show("O campo Nome é obrigatório!");
                    TXT_Codigo.Focus(); // define o foco do cursor
                    return false; // retorna false - que no caso, houve um erro!
                }
                // CAMPO NOME
                string strSobrenome = TXT_Descrição.Text; // O método Trim() remove espaços em branco
                if (strSobrenome == string.Empty)
                {
                    MessageBox.Show("O campo Sobrenome é obrigatório!");
                    TXT_Descrição.Focus(); // define o foco do cursor
                    return false; // retorna false - que no caso, houve um erro!
                }
    
                return true; // Caso nao haja erros, retorna TRUE (ok)
            }


    A única coisa que mudei foi ser mais um pouco mais direto! se a propriedade .text = empty! return nela! :D
    • Editado Thiago_Wenemy terça-feira, 14 de fevereiro de 2012 10:46
    terça-feira, 14 de fevereiro de 2012 10:37
  • Thiago, você está fazendo assim:

                    /*chama o método que irá verificar se todos os campos obrigátorios foram preenchidos
                     * se SIM, entra no IF e continua o processamento
                     * se NÃO, não entra no IF e termina o método*/
                    
                    if (isCamposObrigatoriosPreenchidos())
                    {
                        //Só irá entrar aqui se o valor retornado pela função for TRUE
                    }


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Se for útil marque como resposta e faça um Developer feliz :)

    terça-feira, 14 de fevereiro de 2012 11:12
    Moderador
  • galera.. consegui fiz o seguinte

    private bool CamposObrig()
            {
                bool CampoVazio = false;
    
                if (String.IsNullOrEmpty(TXT_Codigo.Text))
                {
                    MessageBox.Show("Campo (Código) deve ser preenchido", "TechSIS Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    TXT_Codigo.Select();
                    CampoVazio = true;
                }
    
                if (String.IsNullOrEmpty(TXT_Descrição.Text))
                {
                    MessageBox.Show("Campo (Descrição) deve ser preenchido", "TechSIS Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    TXT_Descrição.Select();
                    CampoVazio = true;
                }
    
                if (String.IsNullOrEmpty(TXT_UfSig.Text))
                {
                    TXT_UfSig.Select();
                    MessageBox.Show("Campo (UF) deve ser preenchido", "TechSIS Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    CampoVazio = true;
                }
    
                return CampoVazio;
            }


    Ai.. no click do botão.. coloquei isso

    bool CamposObrigPreenchidos = CamposObrig();
                        if (!CamposObrigPreenchidos)
                        {
                        }
                        else
                        {
                            return;
                        }


    PS: créditos ao Paulo Cesar em 

    http://social.msdn.microsoft.com/Forums/pt-BR/vscsharppt/thread/5f3679aa-6a7d-4efa-a5b6-2acd57a28060/

    • Editado Thiago_Wenemy terça-feira, 14 de fevereiro de 2012 13:19
    terça-feira, 14 de fevereiro de 2012 13:17
  • Thiago, se você considera que alguma resposta lhe ajudou a achar a solução, por favor marque como resposta.

    obrigado.


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Se for útil marque como resposta e faça um Developer feliz :)

    terça-feira, 14 de fevereiro de 2012 13:37
    Moderador
  • Fala Thiago, beleza?

    Abaixo da chamada deste método está ocorrendo outras atividades?
    O que quero dizer com isso: Você tem o método do seu botão, exemplo: btnGravar_Click e o mesmo chama o método CamposObrig (independente se seja um void ou não retorne nada). Após o método CamposObrig executar, existem outras rotinas abaixo?

    Se sim, só o fato de colocar return no método CamposObrig não irá adiantar, visto que somente irá sair do processamento do método atual e após, voltar ao evento do Botão e executar o restante. 

    public 

    bool CamposObrig() /// DEFINE NO ATO DE APERTAR "GRAVAR" QUAIS CAMPOS SÃO OBRIGATORIOS

    {

    var ret = false;

    foreach (var ctl in Controls)

    {

    if (ctl is TextBox)

    {

    if ((ctl as TextBox).Text == string.Empty)

    {

    //*** O AcessibleName ou AcessibleDescription conterão as informações relativas ao campo que estou percorrendo. ***\\

    errorProvider1.SetError((ctl

    as TextBox), "Campo (" + (ctl as TextBox).AccessibleName + ") deve ser preenchido");

    (ctl

    as TextBox).Focus();

    }

    else

    {

    errorProvider1.SetError((ctl

    as TextBox), "");

    ret =

    true;

    }

    }

    }

    return ret;

    }

    private void btnGravar_Click(object sender, EventArgs e)

    {

    if (CamposObrig() == true)

    {

    MessageBox.Show("O Código será executado sem problemas");

    }

    else

    {

    MessageBox.Show("O Código NÃO SERÁ EXECUTADO");

    return;

    }

    }

    Controlar com True ou false seria interessante.

    Agora, aproveitando, eu particularmente procuro utilizar MessageBox somente para perguntas e confirmações. Fora isso, porque não trabalhar com o Componente Error Provider???

    Para ter idéia do que estou falando, segue uma idéia feita com base no que entendi da sua questão:

    Resumindo, ao sair do método CamposObrig(), você continuará a executar o fluxo dentro do evento Click do botão. Espero ter ajudado.


    Cristiano Joaquim

    • Sugerido como Resposta Cristiano Joaquim terça-feira, 14 de fevereiro de 2012 15:51
    terça-feira, 14 de fevereiro de 2012 15:51