Mascarando uma caixa de texto para apenas números, mas não vai aceitar BackSpace
Pergunta
Eu tenho uma caixa de texto que eu gostaria que apenas números. Mas se eu acertar o número errado, eu backspace não pode corrigi-lo. Como posso permitir retrocessos para o trabalho. Graças
private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsNumber(e.KeyChar) != true)
{
e.Handled = true;
}
}
Solução
Você pode adicionar uma verificação para permitir caracteres de controle, bem como:
if (Char.IsControl(e.KeyChar) != true && Char.IsNumber(e.KeyChar) != true)
{
e.Handled = true;
}
Update: em resposta ao comentário de pessoa-b no código s / ele sugere o seguinte estilo (que é também a forma como eu pessoalmente escrever este):
if (!Char.IsControl(e.KeyChar) && !Char.IsNumber(e.KeyChar))
{
e.Handled = true;
}
Outras dicas
A resposta correta é:
private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !сhar.IsNumber(e.KeyChar) && (e.KeyChar != '\b');
}
Você também pode substituir o TextChanged evento:
private void textBox1_TextChanged(object sender, EventArgs e)
{
string text = (sender as TextBox).Text;
StringBuilder builder = new StringBuilder(String.Empty);
foreach (char character in text)
{
if (Char.IsDigit(character))
{
builder.Append(character);
}
}
(sender as TextBox).Text = builder.ToString();
}
Por favor note que você teria que adicionar código para definir a posição do cursor.
private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsNumber(e.KeyChar) && e.KeyCode != Keys.Back)
e.Handled = True;
}
Um formato mais limpo ligeiramente dos acima:
private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !(Char.IsNumber(e.KeyChar) || (e.KeyChar==Keys.Back));
}
Eu encontrei o seguinte funcionou bem. Ele incluiu exceções extras para permitir backspace, as setas tecla Delete etc. Como permitir apenas numérico (0-9) em HTML inputbox usando jQuery?
private void txt_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsDigit(e.KeyChar) || e.KeyChar == '\b')
{
// Allow Digits and BackSpace char
}
else
{
e.Handled = true;
}
}
Consulte Link também: Masking caixa de texto para aceitar apenas decimais decimais / 12209854 # 12209854
Você pode usar o seguinte em Key Imprensa evento:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsDigit(e.KeyChar) & (e.KeyChar != 8)) e.Handled = true;
}