Solo Letras en los Textbox C# - Windows Forms

Existe siempre la necesidad al desarrollar una aplicación de controlar la captura y digitación de datos, para estos casos se puede dar que Solo se acepten números o que Solo se acepten Letras o alfanumericos.

En esta ocasión les traigo un truco que nos permite digitar Solo letras en un TextBox.

El siguiente código, se agrega al evento KeyPress de la caja de texto:
private void txtCaracter_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(char.IsLetter(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
{
      MessageBox.Show("Solo se permiten letras", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
      e.Handled = true;
      return;
}
}
El código anterior permite además, digitar la tecla BackSpace como lo indica la siguiente la linea:
e.KeyChar != (char)Keys.Back)

La diferencia de este post, con el articulo Solo Números en los Textbox C# - Windows Forms es el metodo IsLetter que nos permite controlar que solo se digiten letras.

Leer Más:




Ejecutando el código anterior se genera un mensaje como lo muestra la siguiente imagen:


Digitación correcta:


Está validación no solo se puede aplicar sobre un control Textbox, lo podemos ver en proyectos de tipo consola, como se puede ver en el siguiente ejemplo. Parte II: Solo Letras C# - Windows Forms (Consola)


Share:

16 comentarios:

  1. Gracias dude!! buen post!!

    ResponderEliminar
  2. Anónimo, que bueno que te halla servido el post, si te llega a interesar, la validación también se encuentra para solo números en Windows Form. Hasta pronto.

    ResponderEliminar
  3. compañero excelente michas gracias Dios te bendiga

    ResponderEliminar
  4. y si necesito un textBox con solo letras y darle enter y pasar al siguiente textBox, como puedo hacerlo?

    ResponderEliminar
  5. Hola diego un textbox de solo letras te puede servir este post, para el Enter, solo crear en la caja de texto el evento KeyPress asi:

    Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then
    Text2.SetFocus
    End If
    End Sub

    Espero te sirva, hasta pronto.

    ResponderEliminar
  6. y si necesito validar sólo letras pero sin textBox?...
    es decir...sólo en la consola y cuando corra y me pida ingresar el dato y ponga un número o una cadena de números me diga "Sólo se aceptan letras" o algo así?

    ResponderEliminar
  7. Anónimo puedes utilizar el siguiente ejemplo:

    //Método
    static bool IsLetters(string sCaracteres)
    {
    foreach (char ch in sCaracteres)
    {
    if (!Char.IsLetter(ch) && ch != 32)
    {
    return false;
    }
    }
    return true;
    }

    //Método de inicio:

    static void Main(string[] args)
    {
    string sCaracteres = string.Empty;

    Console.WriteLine("Escriba un texto a validar");
    sCaracteres = Console.ReadLine();
    //ValidaSoloLetras();

    if (IsLetters(sCaracteres))
    {
    Console.WriteLine("Los caracteres son letras.");
    }
    else
    {
    Console.WriteLine("Solo se aceptan letras");
    }
    Console.ReadLine();
    }

    Si te sirve me cuentas, hasta pronto.

    ResponderEliminar
  8. Y COMO PUEDO HACER PARA QUE ACEPTE ESPACION

    ResponderEliminar
  9. Hola Nestor, para que el código acepte espacios en el If debes preguntar por:

    (e.KeyChar != (char)Keys.Space)

    Quedando algo así:

    if (!(char.IsLetter(e.KeyChar)) && (e.KeyChar != (char)Keys.Back) && (e.KeyChar != (char)Keys.Space))
    {
    MessageBox.Show("Solo se permiten Letras", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    e.Handled = true;
    return;
    }

    Espero te sirva, cualquier duda me cuentas, saludos.

    ResponderEliminar
  10. Si quisiera escribir en un textbox2 el numero de letras que me indique el textbox1..
    ejem...textbox1= 5
    textbox2= "perro"
    si escribimos mas de 5 letras...mostrar un mensaje de que solo se acepten 5 letras

    ResponderEliminar
  11. Anónimo puedes utilizar el siguiente ejemplo, recuerda agregar 2 TextBox y el evento TextChanged del segundo TextBox2 así:

    private void textBox2_TextChanged(object sender, EventArgs e)
    {
    if (textBox2.Text.Length > Convert.ToInt32(textBox1.Text))
    {
    MessageBox.Show("Solo se aceptan " + textBox1.Text.ToString() + " caracteres.");
    textBox2.Text = textBox2.Text.Substring(0, textBox2.Text.Length -1 );
    }
    }

    Espero te sirva.

    ResponderEliminar
  12. Hola amigo tengo una pregunta esta todo perfecto me funciona solo queria preguntar como haria para controlar todo eso en varios textBox no se si me explico es que se me hace demasiado tener q poner en todos los textBox el mismo codigo si se lo podia hacer para que varios textBox el mismo codigo
    espero me des la ayuda en eso

    ResponderEliminar
  13. Gracias por el código, podrás ayudarme para poder colocar acentos " ´ " en las letras.

    ResponderEliminar
  14. Este código es perfecto pero la validación no me sirve porque al pegar texto que contiene letras, números, apostrofes y signos y los acepta. ¿Como puedo hacerle para que no pegue el texto en el textBox si este contiene números, apostrofes y signos?......
    Agradecería mucho de su ayuda:....

    ResponderEliminar
  15. Ana Carpio podrías validar incluyendo este código:

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
    if (e.Control == true)
    {
    MessageBox.Show("Cortar y/o pegar estas desabilitados");
    }
    }

    ResponderEliminar
  16. Deseo que en un textbox solo acepte letras y numeros. Validar para que no se puedan escribir apostrofes, signos ni caracteres. Ademas de que no se puedan escribir que tampoco se puedan pegar con contrl+v ni con el mouse, textos que contengan todo lo que ya mencione.

    ResponderEliminar