Enmascarar un cuadro de texto para los números sólo, pero no aceptará Retroceso
Pregunta
Tengo un cuadro de texto que me gustaría que sólo números. Pero si golpeo a un número equivocado, no puedo retroceso para corregirlo. ¿Cómo puedo permitir retrocesos para trabajar. Gracias
private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsNumber(e.KeyChar) != true)
{
e.Handled = true;
}
}
Solución
Se podría añadir una verificación para permitir que los caracteres de control, así:
if (Char.IsControl(e.KeyChar) != true && Char.IsNumber(e.KeyChar) != true)
{
e.Handled = true;
}
Actualización: en respuesta al comentario de persona-b en el código de s / él sugiere el siguiente estilo (que también es como yo, personalmente, escribir esto):
if (!Char.IsControl(e.KeyChar) && !Char.IsNumber(e.KeyChar))
{
e.Handled = true;
}
Otros consejos
La respuesta correcta es:
private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !сhar.IsNumber(e.KeyChar) && (e.KeyChar != '\b');
}
También puede anular el 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();
}
Tenga en cuenta que habría que añadir en el código para establecer la posición de intercalación.
private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsNumber(e.KeyChar) && e.KeyCode != Keys.Back)
e.Handled = True;
}
Un formato ligeramente más limpia de lo anterior:
private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !(Char.IsNumber(e.KeyChar) || (e.KeyChar==Keys.Back));
}
He encontrado el siguiente funcionado bien. Se incluyó excepciones adicionales para permitir la tecla de retroceso, las teclas de flecha la eliminación de clave, etc. Cómo permitir sólo numérico (0-9) en la caja de texto HTML 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 también: enmascaramiento del cuadro de texto para aceptar sólo los decimales decimales / 12209854 # 12209854
Puede utilizar el siguiente en el evento de prensa Clave:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsDigit(e.KeyChar) & (e.KeyChar != 8)) e.Handled = true;
}