2010-04-07 793 views
7

¿Cómo puedo devolver la clave ?, quiero decir si solo quiero permitir valores enteros en el cuadro de texto, ¿cómo puedo evitar que el usuario ingrese números enteros? Con respecto al evento KeyPress, sé hay otras formas, como la expresión, para que coincida con el valor de la cadena, pero no quiero asignar un valor no válido al cuadro de texto.Cancelar evento de pulsación de tecla

if ((value >0 a&&(value <=9)) then 
    assigned 
else 
    return 

Respuesta

14

Utilice la propiedad manejada

e.Handled = true; 

Ejemplo de MSDN: link

// Boolean flag used to determine when a character other than a number is entered. 
private bool nonNumberEntered = false; 

// Handle the KeyDown event to determine the type of character entered into the control. 
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) 
{ 
    // Initialize the flag to false. 
    nonNumberEntered = false; 

    // Determine whether the keystroke is a number from the top of the keyboard. 
    if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9) 
    { 
     // Determine whether the keystroke is a number from the keypad. 
     if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9) 
     { 
      // Determine whether the keystroke is a backspace. 
      if(e.KeyCode != Keys.Back) 
      { 
       // A non-numerical keystroke was pressed. 
       // Set the flag to true and evaluate in KeyPress event. 
       nonNumberEntered = true; 
      } 
     } 
    } 
    //If shift key was pressed, it's not a number. 
    if (Control.ModifierKeys == Keys.Shift) { 
     nonNumberEntered = true; 
    } 
} 

// This event occurs after the KeyDown event and can be used to prevent 
// characters from entering the control. 
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) 
{ 
    // Check for the flag being set in the KeyDown event. 
    if (nonNumberEntered == true) 
    { 
     // Stop the character from being entered into the control since it is non-numerical. 
     e.Handled = true; 
    } 
} 
0

Usted podría utilizar MaskedTextBox y obligarlo a ser un número entero solamente.

+0

para WPF, que tal vez tendría que consultar esta página: http://stackoverflow.com/questions/481059/where-can-i-find-a-free-masked-textbox-in-wpf – Vlad

0

Usted puede heredar de cuadro de texto y, a continuación:

Protected Overrides Sub OnTextInput(ByVal e As System.Windows.Input.TextCompositionEventArgs) 

     Dim newChar As Char = Convert.ToChar(e.Text) 
     If Not [Char].IsDigit(newChar) Then e.Handled = True 

End Sub 

C# versión

protected override void OnTextInput(System.Windows.Input.TextCompositionEventArgs e) 
{    
    char newChar = Convert.ToChar(e.Text);        
    if (!Char.IsDigit(newChar)) e.Handled = true; 
} 
3

Es posible utilizar el evento de pulsación de tecla de la siguiente manera. use e.Mandado a verdadero para cancelar la entrada del usuario

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

Cree una cadena con los caracteres que le permite al usuario ingresar.

Uso KeyDown o KeyUp para manejar las teclas especiales

private void tbN1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    String sKeys = "1234567890ABCDEF"; 
    if (!sKeys.Contains(e.KeyChar.ToString().ToUpper())) 
     e.Handled = true; 
} 
0

Técnicamente esto es incorrecto ya ha etiquetado su pregunta WPF. Pero como aceptó la otra respuesta de Windows Forms, publicaré mi solución que funciona para números reales en lugar de enteros. También está localizado para aceptar solo el separador decimal del lugar actual.

private void doubleTextBox_KeyPress (object sender, KeyPressEventArgs e) 
{ 
    var textBox = sender as TextBoxBase; 
    if (textBox == null) 
     return; 

    // did the user press their locale's decimal separator? 
    if (e.KeyChar.ToString() == CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator) 
    { 
     if (textBox.Text.Length == 0) // if empty, prefix the decimal with a 0 
     { 
      textBox.Text = "0" + CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator; 
      e.Handled = true; 
      textBox.SelectionStart = textBox.TextLength; 
     } 
     // ignore extra decimal separators 
     else if (textBox.Text.Contains(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator)) 
      e.Handled = true; 
    } 
    // allow backspaces, but no other non-numeric characters; 
    // note that arrow keys, delete, home, end, etc. do not trigger KeyPress 
    else if (e.KeyChar != '\b' && (e.KeyChar < '0' || e.KeyChar > '9')) 
     e.Handled = true; 
} 
Cuestiones relacionadas