2009-07-28 38 views

Respuesta

29

Me gusta usar !Char.IsControl (e.KeyChar) para que todos los caracteres de "control" como la tecla de retroceso y los atajos de teclado del portapapeles estén exentos.

Si lo que desea es comprobar si la tecla de retroceso, puede probablemente salirse con:

if (e.KeyChar == (char)8 && ...) 
+0

Acabo de probarlo - la comparación con (char) 8 realmente funciona. –

+11

Podría ser mejor usar ''\ b'' sobre' (char) 8'. –

+5

@AlexHumphrey Creo que aún mejor es '(char) Keys.Back' – Antonio

1

De la documentación:

El evento KeyPress no aumente en claves no son caracteres; sin embargo, las claves que no son caracteres plantean los eventos KeyDown y KeyUp.

+4

En cuyo caso la documentación es incorrecta. He probado (char) 8 desde el evento de KeyPress y definitivamente ha surgido. –

+0

+1 Estoy completamente satisfecho con Ed S. por qué usar 'type casting' cuando tenemos los eventos' key up' y 'key down'. En casos normales, deberíamos evitar 'type casting'. deberíamos usar 'type casting' cuando no tenemos otras alternativas. –

17

utilizo los dos segmentos siguientes montón:

Esta es para restringir un cuadro de texto a un entero solamente, pero permitiendo teclas de control:

if (Char.IsDigit(e.KeyChar)) return; 
if (Char.IsControl(e.KeyChar)) return; 
e.Handled = true; 

Esta es para restricing un cuadro de texto a dobles, lo que permite uno '.' solamente, y permitiendo teclas de control:

if (Char.IsDigit(e.KeyChar)) return; 
if (Char.IsControl(e.KeyChar)) return; 
if ((e.KeyChar == '.') && ((sender as TextBox).Text.Contains('.') == false)) return; 
if ((e.KeyChar == '.') && ((sender as TextBox).SelectionLength == (sender as TextBox).TextLength)) return; 
e.Handled = true; 
4

La tecla de retroceso no se activó mediante el evento KeyPress. Así que hay que cogerlo en eventos KeyDown o KeyUp y establecer la propiedad SuppressKeyPress es cierto para prevenir el cambio tecla de retroceso en el cuadro de texto el texto:

private void txtAdd_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Back) 
    { 
     e.SuppressKeyPress = true; 
    } 
} 
+0

+1 para usar Keys.Back –

+1

El retroceso aumenta un evento de pulsación de tecla – Antonio

-1
private void Keypressusername(object sender, KeyPressEventArgs e) 
{ 
    e.Handled = !(char.IsLetter(e.KeyChar)); 
    if (char.IsControl(e.KeyChar)) 
    { 
     e.Handled = !(char.IsControl(e.KeyChar)); 
    } 
    if (char.IsWhiteSpace(e.KeyChar)) 
    { 
     e.Handled = !(char.IsWhiteSpace(e.KeyChar)); 
    } 
} 
+0

Si bien este ejemplo de código posiblemente pueda responder a la pregunta, sería preferible incluir alguna explicación esencial a su respuesta. Tal como está ahora, esta respuesta agrega poco o ningún valor para los lectores futuros. –

0
private void KeyPressNameSurname(object sender, KeyPressEventArgs e) 
{ 
    if (char.IsPunctuation(e.KeyChar) || char.IsSymbol(e.KeyChar) || char.IsDigit(e.KeyChar)) 
    { 
     e.Handled = true; 
     myTextBox.Text = "Not Valid"; 
     myTextBox.Visible = true; 
    } 
    else 
    { 
     myTextBox.Visible = false; 
    } 
    } 
4

hay que añadir (char.IsControl (e.KeyChar)) en tu oración y eso es todo.

private void txtNombre_KeyPress(object sender, KeyPressEventArgs e) 
     { 
      if (!(char.IsLetter(e.KeyChar)) && !(char.IsNumber(e.KeyChar)) && !(char.IsControl(e.KeyChar)) && !(char.IsWhiteSpace(e.KeyChar))) 
      { 
       e.Handled = true; 
      } 
     } 
Cuestiones relacionadas