Usuário com melhor resposta
Verificação de string em evento de textbox

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!
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
-
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
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)
-
-
é 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.... -
-
-
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
-
-
-
-
-
-
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
-
-
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>>