GAMBCODES

Somente valores decimais em um TextBox (C#)

Para você que queima a cabeça tentando criar uma forma de impedir a entrada de valores incorretos em um componente TextBox para valores decimais, eis uma forma simples e prática para conseguir isto:

Supondo que você já tenha um projeto criado na qual possua um TextBox, no Visual Studio, na aba de propriedades , vá em eventos e localize o evento  KeyPress; click duplo nele e será gerado automaticamente este código:

PATROCÍNIO:

barradeouro

private void txtUsuario_KeyPress(object sender, KeyPressEventArgs e)

{

}

 

 

 

Dentro das chaves será adiciona a rotina para validar.  Primeiramente criamos uma variável do tipo TextBox para obter que irá receber a variável sender passada no método:

TextBox txtTemp = (TextBox)sender;




Percebemos pelo código que é necessário fazer o casting da variável sender, que é do tipo System.Object para o tipo TextBox. Seguindo iremos  usar uma condição que irá analisar se já há uma vírgula no TextBox e a tecla digitada trata-se de uma vírgula. Vemos:

//Verifica se já há uma vígula e se a tecla precionada for uma virgula impede a operação
if (txtTemp.Text.Contains(“,”) && e.KeyChar == (char)44)

{
    e.Handled = true;

}

Certo. Contains verifica se já há uma virgula dentro do TextBox, tendo uma vírgula e a tecla digitada sendo também uma vírgula o teclado é travado alterando a propriedade Handled para true. A propriedade KeyChar armazena a tecla digitada em formato de carácter; e o valor 44 equivale a uma vírgula segundo a tabela ASCII, assim faz-se o casting de um inteiro para carácter e compara com a tecla digitada.

Seguindo verifica-se se o que é digitado não é número, vírgula e backspance. Não sendo estes o teclado também é travado. Vejamos:
//Se não for número, vírgula ou backspace trava a tecla
if (!(Char.IsNumber(e.KeyChar)) && !(e.KeyChar == (char)8) &&
!(e.KeyChar == (char)44))
{
e.Handled = true;
}

O método IsNumber verifica se o caractere passado é um número e retorna verdadeiro para um número e falso para no caso de não ser um número. O valor 8 equivale a tecla backspace e o valor 44 vírgula, como já vimos.

E com somente estas poucas linhas de código conseguimos fazer uma rotina que consiga validar um campo para valores decimais!

Aqui o código completo:

private void txtUsuario_KeyPress(object sender, KeyPressEventArgs e)

{

TextBox txtTemp = (TextBox)sender;

//Verifica se já há uma vígula e se a tecla precionada for uma virgula impede a operação
if (txtTemp.Text.Contains(“,”) && e.KeyChar == (char)44)

{
    e.Handled = true;

}

//Se não for número, vírgula ou backspace trava a tecla
if (!(Char.IsNumber(e.KeyChar)) && !(e.KeyChar == (char)8) &&
!(e.KeyChar == (char)44))
{
e.Handled = true;
}

}

Comments

comments

Categories:   Uncategorized

Comments