Olá pessoal. Desta vez, gostaria de comentar um pouco sobre um ponto fundamental em qualquer aplicação. Validação de Dados. Embora trabalhosa (e eu diria até chata) de se codificar, a validação de dados é um ponto crucial em seu aplicativo. Uma boa validação, assegura que seu aplicativo funcione de maneira estável e siga o fluxo programado.
Como primeiro exemplo, usarei o sistema mais simples de validação no front-end. Exemplo.
Aplicativo de exemplo
Validação no Front-End
A validação na UI deve ser rápida e garantir que o input do usuário está dentro do escopo pré-determinado para o campo especifico. No exemplo, a primeira TextBox espera um valor numérico, que será convertido para o formato Currency (Moeda – R).
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
//Catches numeric keystrokes
if (e.KeyValue < 58)
{
if (e.KeyValue < 48 e.KeyValue > 57)
{
//Backspace
if (e.KeyValue == 8)
{
e.SuppressKeyPress = false;
}
//Enter
else if (e.KeyValue == 13)
{
e.SuppressKeyPress = false;
this.ValidateFill(this.textBox1);
}
else
{
if (e.KeyCode == Keys.Left e.KeyCode == Keys.Right e.KeyCode == Keys.Up e.KeyCode == Keys.Down)
{
e.SuppressKeyPress = true;
}
else
{
e.SuppressKeyPress = false;
}
}
}
else
{
if (e.Modifiers == Keys.Shift e.Modifiers == Keys.ShiftKey)
{
e.SuppressKeyPress = true;
}
else
{
e.SuppressKeyPress = false;
}
}
}
//Catches Numpad keystrokes
else
{
if (e.KeyValue < 96 e.KeyValue > 105)
{
e.SuppressKeyPress = true;
}
else
{
e.SuppressKeyPress = false;
}
}
this.label1.Text = e.KeyCode.ToString();
this.label2.Text = e.KeyValue.ToString();
this.label5.Text = e.KeyData.ToString();
this.label6.Text = e.Modifiers.ToString();
}
Existem eventos distintos onde podemos aplicar sua regra de validação. O evento KeyDown do TextBox, ocorre após o pressionamento da tecla e antes da entrada ser processada visualmente. Lógicamente este é o lugar perfeito, pois estaremos filtrando a entrada do usuário antes desta ser mostrada na tela.
Há diversas maneiras de se capturar o input do usuário. Em todos eventos (KeyDown,KeyUp e KeyPress) há um argumento do tipo KeyEventArgs. Este argumento contem 3 propriedades que nos possibilitam recuperar a entrada do usuário, são eles: KeyData, KeyValue e KeyCode.
KeyValue retorna um int32 que corresponde ao código ASCII da tecla pressionada. Como esperamos receber apenas numeros em nosso campo, o primeiro filtro checa se a entrada do usuário foi uma tecla numerica (Numpad ou Keypad). Se a entrada não for uma tecla numerica eu indico ao aplicativo que aquela entrada não deve ser processada, com e.SuppressKeyPress = true.
O segundo filtro checa se a tecla backspace ou enter foi pressionada. Devemos dar a chance ao usuário de corrigir o numero digitado ou finalizar a entrada e passar para o proximo campo.
O terceiro filtro checa se a tecla Shift estava pressionada no momento da entrada. Isso pode ser feito de 2 maneiras:
Visualizando a propriedade Modifiers de KeyEventArgs (e.Modifiers == Keys.Shift), ou pela propriedade KeyCode, que retorna um valor da enumeração Keys de System.Windows.Forms (e.KeyCode == Keys.Left…).
Depois que a entrada do usuário já foi filtrada e está dentro do esperado, podemos com segurança formatar a entrada. Nessa caso desejo demonstrar um valor monetario. Para isso uso uma sobrecarga de ToString, que toma como parametro uma string que indica como deverá ser feita a formatação pela CLR.
private void ValidateFill(System.Windows.Forms.Control ctl)
{
System.Windows.Forms.TextBox t = (System.Windows.Forms.TextBox)ctl;
try
{
int s = System.Convert.ToInt32(ctl.Text);
t.Text = s.ToString("C");
MessageBox.Show("Validado!");
System.Windows.Forms.Control c = this.GetNextControl(ctl, true);
c.Focus();
}
catch (Exception ex)
{
MessageBox.Show("Nao e int32");
t.Text = "0,00";
t.Focus();
}
Conclusão
Este foi um exemplo bem simples de validação e formatação. Na próxima semana, veremos como podemos usar recursos mais sofisticados de validação com Regex.
Até a próxima!



