2011-11-30 50 views

Respuesta

14

Se puede utilizar el siguiente fragmento:

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    if (!System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, "^[a-zA-Z ]")) 
    { 
     MessageBox.Show("This textbox accepts only alphabetical characters"); 
     textBox1.Text.Remove(textBox1.Text.Length - 1); 
    } 
} 
+1

Parece que no funciona muy bien. Si agrego una letra y luego un número/espacio en blanco/lo que sea, me dejará ir ya que estoy satisfaciendo la expresión regular (comience con la letra). –

+0

@favoretti ahora el código funciona bien, pero se produce una excepción si escribo el primer entero de caracteres y cuando presiono la tecla de retroceso para eliminarlos. El código funciona bien para numérico, aparece el mensaje cuando escribo el numérico.pero cuando traté de borrar con retroceso me da el error StartIndex no puede ser menor que cero, nombre del parámetro startIndex. ¿Cómo manejar esto? – chathwind

15

Usted puede tratar de controlar el evento KeyPress para el cuadro de texto

void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back); 
} 

Además dicen que permita la tecla de retroceso en caso de que desea eliminar algún texto, esta debería funcionar perfectamente bien para usted

EDIT

El código anterior no funcionará para pegar en el campo para el que creo que tendrá que usar el evento TextChanged, pero entonces sería un poco más complicado tener que eliminar el carácter incorrecto o resaltarlo y colocar el cursor para que el usuario haga la corrección O tal vez podría validar una vez que el usuario haya ingresado el texto completo y etiquetado el control.

+0

Este funciona muy bien, pero no me permitirá pegar un texto que debe pasar la validación. –

4

La forma más sencilla es para manejar el TextChangedEvent y comprobar lo que se ha escrito:

string oldText = string.Empty; 
    private void textBox2_TextChanged(object sender, EventArgs e) 
    { 
     if (textBox2.Text.All(chr => char.IsLetter(chr))) 
     { 
      oldText = textBox2.Text; 
      textBox2.Text = oldText; 

      textBox2.BackColor = System.Drawing.Color.White; 
      textBox2.ForeColor = System.Drawing.Color.Black; 
     } 
     else 
     { 
      textBox2.Text = oldText; 
      textBox2.BackColor = System.Drawing.Color.Red; 
      textBox2.ForeColor = System.Drawing.Color.White; 
     } 
     textBox2.SelectionStart = textBox2.Text.Length; 
    } 

Ésta es una versión libre de expresión regular, si lo prefiere. Hará que el cuadro de texto parpadee en la entrada incorrecta. Tenga en cuenta que también parece admitir operaciones de pegado también.

+0

señor que fue genial, pero ¿puede decirme en detalle cómo se detiene el tipado automáticamente? ¿Es solo el ciclo if el que verifica pero cómo se detiene el tipado? y sobre la expresión lambda? textBox1.Text.All (chr => char.IsLetter (chr)) de qué se trata todo esto. significa cómo funciona, por favor si puedes –

+0

¡Oye! Bueno, lo que hace es almacenar el texto anterior de la entrada en la variable oldText. Luego, en el cambio posterior del cuadro de texto, se verifica carácter por carácter y, si el carácter no es una letra, devuelve el texto anterior. Si lo es, establece que el texto anterior sea el mismo que el actual (nuevo) de entrada de texto. Por lo tanto, si tiene una entrada válida, el valor oldtext es el valor TextBox, si tiene un resultado no válido, funciona al revés. También algunos estilos GUi ayudan a visualizar si hay un error o no. Espero que esto ayude. –

+0

Entonces textBox2.Text.All() lambda devolverá falso si incluso un caracter no es una letra. Si todas son letras, devolverá verdadero. A partir de ese momento, tiene lugar la explicación anterior. –

2
 if (System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, "^[a-zA-Z]+$")) 
     { 
     } 
     else 
     { 
      textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1); 
      MessageBox.Show("Enter only Alphabets"); 


     } 

favor Prueba este

3

Código Escribir en Text_KeyPress eventos como

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 

     if (!char.IsLetter(e.KeyChar)) 
     { 
      e.Handled = true; 
     } 
    } 
5
private void textbox1_KeyDown_1(object sender, KeyEventArgs e) 
{ 
    if (e.Key >= Key.A && e.Key <= Key.Z) 
    { 
    } 
    else 
    { 
     e.Handled = true; 
    } 
} 
1
private void textBox2_KeyPress(object sender, KeyPressEventArgs e) 
     { 
      if (e.KeyChar >= '0' && e.KeyChar <= '9') 
       e.Handled = true; 
      else 
       e.Handled = false; 
     } 
+0

Por favor incluya una explicación de por qué su respuesta funcionará y cómo conectar el cuadro de texto a su evento. – Vulcronos

2

Ésta está trabajando absolutamente bien ...

private void manufacturerOrSupplierTextBox_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (char.IsControl(e.KeyChar) || char.IsLetter(e.KeyChar)) 
     { 
      return; 
     } 
     e.Handled = true; 
    } 
+0

Gracias por el control IsControl. –

0
private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (!char.IsControl(e.KeyChar) && !char.IsLetter(e.KeyChar) && 
     (e.KeyChar !='.')) 
     { 
      e.Handled = true; 
      MessageBox.Show("Only Alphabets"); 
     } 
    } 
+1

Explica mejor tu solución –

1

Prueba esto

  private void tbCustomerName_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back||e.KeyChar==(char)Keys.Space); 
    } 

Permite espacios en blanco Demasiado

1

puede probar siguiente código que alerta en el momento de la rueda de prensa clave

private void tbOwnerName_KeyPress(object sender, KeyPressEventArgs e) 
    { 

     //===================to accept only charactrs & space/backspace============================================= 

     if (e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back || e.KeyChar == (char)Keys.Space)) 
     { 
      e.Handled = true; 
      base.OnKeyPress(e); 
      MessageBox.Show("enter characters only"); 
     } 
0

Aquí está mi solución y funciona como se planeó:

string errmsg = "ERROR : Wrong input"; 
ErrorLbl.Text = errmsg; 

if (e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back || e.KeyChar == (char)Keys.Space)) 
{ 
    ErrorLbl.Text = "ERROR : Wrong input"; 
} 
else ErrorLbl.Text = string.Empty; 
if (ErrorLbl.Text == errmsg) 
{ 
    Nametxt.Text = string.Empty; 
} 
0

Intente seguir el código en el evento KeyPress del cuadro de texto

if (char.IsLetter(e.KeyChar) == false & 
     Convert.ToString(e.KeyChar) != Microsoft.VisualBasic.Constants.vbBack) 
      e.Handled = true 
Cuestiones relacionadas