solo numeros c# textbox numbers key-events

numeros - ¿Cómo hacer que TextBox reciba solo valores clave numéricos usando KeyDown Event en C#?



keypress c# textbox (4)

Este código en mi formulario actualiza el textBox1.Text dos veces cuando se presionan las teclas numéricas.

private void textBox1_KeyDown( object sender, KeyEventArgs e ) { //MessageBox.Show(); if( char.IsNumber((char)e.KeyCode) ) { textBox1.Text += (char)e.KeyCode; } }

Explica por qué si puedes? Modifique el código o bríndeme una mejor solución para esto.

Entrada (en el cuadro de texto1):

54321

Salida:

1234554321


A partir de la sintaxis, supongo que está utilizando WinForms para la siguiente respuesta.

El evento de pulsación de tecla no se suprime, por lo que funciona igual que un evento de pulsación de tecla normal y agrega el carácter al texto del cuadro. Además, agrega el personaje al texto usted mismo una vez más.

Intente suprimir el evento de tecla presionada en caso de que se presione una tecla, no desea permitir.

private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (!char.IsNumber((char)e.KeyCode)) { e.SuppressKeyPress = true; } }


Cuando presiona una tecla, un carácter ya está anexado a su TextBox . Luego ejecuta el siguiente código y, si la clave representa un número, lo vuelve a agregar:

if (char.IsNumber((char)e.KeyCode)) { textBox1.Text += (char)e.KeyCode; }

Si desea suprimir cualquier clave que no sea un número, puede usar esto en su lugar:

e.SuppressKeyPress = !char.IsNumber((char)e.KeyCode);


Pruebe este código para aceptar solo números

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar)) e.Handled = true; }


Puedes intentarlo así:

private void textBox1_KeyDown(object sender, KeyEventArgs e) { e.SuppressKeyPress = !(e.KeyValue >= 48 && e.KeyValue <= 57); }

Compruebe las nuevas API de teclado: KeyEventArgs.SuppressKeyPress

El problema es que "Gestionado" no se ocupa de los mensajes WM_CHAR pendientes que ya se han acumulado en la cola de mensajes, por lo que configurar Handled = true no impide que ocurra KeyPress.

Para no romper a nadie que haya recibido e.Handled = true, necesitamos agregar una nueva propiedad llamada SuppressKeyChar. Si hiciéramos lo contrario, si "manejar" una tecla repentinamente comenzara a funcionar realmente, podríamos separar a las personas que accidentalmente tenían este conjunto en verdadero.