none
Verificação de string em evento de textbox RRS feed

  • Pergunta

  • Olá a todos!

    Quando o usuário tenta digitar algo em um textbox, o evento textChanged faz uma verificação que não permite caracteres especiais e números:

     

    *evento

             private void txtNome_TextChanged(object sender, EventArgs e)

            {            

                if (!Uteis.validaCampo(@"^[a-zA-ZçÇáÁôÔêÊ\s]+$", txtNome.Text))

                {

                    MessageBox.Show("Digite apenas letras!");

                    txtNome.Clear();

                }

            }

     

    *validaCampo:

             public static bool validaCampo(string regexparam, string campo)

            {

                Regex rg = new Regex(regexparam);

                return rg.IsMatch(campo);

            }

    O problema é que se o usuário digitar algo e apagar, o método é acessado novamente, e se o campo for apagado totalmente, ele verifica erro e aparece a mensagem para digitar apenas letras...Eu devo chamar o método em outro evento? Na verdade o que eu gostaria é que ele verificasse a string toda, e não char por char como está fazendo agora!  

    quinta-feira, 19 de agosto de 2010 17:24

Respostas

  • Se for Windows Form recomendo que faça assim no evento KeyPress:

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!Char.IsLetter(e.KeyChar) && !Char.IsControl(e.KeyChar))
        {
            e.Handled = true;
        }
    }

    Você não vai precisar fazer nenhum metodo de validação. Caso precisa digitar algo mais de uma conferida nos metodos do Char:

    Char.Is.... existem mais opções como apenas numeros, numeros e letras, etc...

    • Marcado como Resposta Lana Csil quinta-feira, 19 de agosto de 2010 18:00
    quinta-feira, 19 de agosto de 2010 17:42
  • o que o thiago quis dizer no finzinho do post dele Lana, é que voce pode ver as outras validações que a classe "char" tem, tais como:

    char.IsWhiteSpace("letra que voce ta colocando").

     

    tipo:

    //declaro uma variavel char e atribuo a ela o espaço em branco (que eh o que voce precisa aceitar tb)

    char a = ' ';

     

    //testo se ela eh espaço em branco

    If (char.IsWhiteSpace(a))

    messagebox.show("é espaço em branco e pode passar");

     

    • Marcado como Resposta Lana Csil quinta-feira, 19 de agosto de 2010 18:00
    quinta-feira, 19 de agosto de 2010 17:55

Todas as Respostas

  • tente fazer a validação apenas quando ocorrer o evento "Leave" da textbox(quando o usuario termina de digitar e clica em qualquer outra coisa)
    • Marcado como Resposta Lana Csil quinta-feira, 19 de agosto de 2010 17:39
    • Não Marcado como Resposta Lana Csil quinta-feira, 19 de agosto de 2010 17:58
    quinta-feira, 19 de agosto de 2010 17:29
  • Certinho JeffersonDF, muito obrigada!
    quinta-feira, 19 de agosto de 2010 17:40
  • é em ASP.NET ?

    Se for usa um regular expression validator....


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    quinta-feira, 19 de agosto de 2010 17:40
    Moderador
  • que isso, disponha Lana. =)
    quinta-feira, 19 de agosto de 2010 17:42
  • Rui,

    É WinForms!

    quinta-feira, 19 de agosto de 2010 17:42
  • Se for Windows Form recomendo que faça assim no evento KeyPress:

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!Char.IsLetter(e.KeyChar) && !Char.IsControl(e.KeyChar))
        {
            e.Handled = true;
        }
    }

    Você não vai precisar fazer nenhum metodo de validação. Caso precisa digitar algo mais de uma conferida nos metodos do Char:

    Char.Is.... existem mais opções como apenas numeros, numeros e letras, etc...

    • Marcado como Resposta Lana Csil quinta-feira, 19 de agosto de 2010 18:00
    quinta-feira, 19 de agosto de 2010 17:42
  • Jefferson, 

    Acabei de verificar, que se eu digito no textbox, saio do textbox e volto lá apagar, ele entra no método e retorna erro!

    Ou seja, se eu apenas clicar no textbox em branco ele verifica erro, devo alterar minha expressão regular?

    quinta-feira, 19 de agosto de 2010 17:43
  • aaaa!

    entao eu passo a bola pros caras experientes ai enquanto nao descubro aki hehe

    =X

    quinta-feira, 19 de agosto de 2010 17:46
  • Thiago,

    Essa solução é perfeita para outros campos do meu formulário, porém este em especial é o nome, ou seja, preciso utilizar o "espaço" para nome e depois sobrenome etc...Tem como alterar?

    quinta-feira, 19 de agosto de 2010 17:49
  • Lana, pode desmarcar minha resposta como correta para que outros vejam a interrogação e possam sanar sua dúvida.

    =D

    quinta-feira, 19 de agosto de 2010 17:50
  • Lana

    Sim, adicione está condição no if que fiz acima:

    && !Char.IsWhiteSpace(e.KeyChar)

    quinta-feira, 19 de agosto de 2010 17:52
  • o que o thiago quis dizer no finzinho do post dele Lana, é que voce pode ver as outras validações que a classe "char" tem, tais como:

    char.IsWhiteSpace("letra que voce ta colocando").

     

    tipo:

    //declaro uma variavel char e atribuo a ela o espaço em branco (que eh o que voce precisa aceitar tb)

    char a = ' ';

     

    //testo se ela eh espaço em branco

    If (char.IsWhiteSpace(a))

    messagebox.show("é espaço em branco e pode passar");

     

    • Marcado como Resposta Lana Csil quinta-feira, 19 de agosto de 2010 18:00
    quinta-feira, 19 de agosto de 2010 17:55
  • Muito obrigada Thiago e Jefferson, estou iniciando em c#, por isso sei pouquíssimo sobre as possibilidades de cada método, me ajudaram muito!
    quinta-feira, 19 de agosto de 2010 18:03
  • Olá.

           
        private string lastText; // para armazenar o último resultado válido
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
          TextBox editor = sender as TextBox;
          string current = editor.Text;
          if (isValid(current))
          {
            lastText = current;
          }
          else
          {
            editor.Text = lastText;
          }
        }
    
    // Aqui vai a sua lógica com Regex
    // Ao invés de ser char a char... seria pela string (depois do novo char)
        private bool isValid(string text)
        {
          if (text.StartsWith("t") || string.IsNullOrEmpty(text))
          {
            return true;
          }
          return false;
        }
    

    Espero que dê certo. :)

    <<insert your signature here>>
    • Sugerido como Resposta S4P0 quinta-feira, 19 de agosto de 2010 18:05
    • Editado S4P0 quinta-feira, 19 de agosto de 2010 18:11 code-format
    quinta-feira, 19 de agosto de 2010 18:05