Вы находитесь на странице: 1из 9

TextBox que acepta solo nmeros y restriccin de caracteres

Muy til para la validacin o simplemente restringir las entradas de datos en los formularios. En esta oportunidad veremos la restriccin de caracteres en un Control TextBox, para esto hacemos uso del Evento KeyPress como vemos a continuacin:

En este ejemplo usamos y tres controles TextBox uno que acepta entrada de solo nmeros , otro de solo letras, y por ultimo caracteres definidos por el desarrollador.

El cdigo Fuente:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45

public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { this.Close(); }

private void txtNumeros_KeyPress(object sender, KeyPressEventArgs e) { if (!Char.IsNumber(e.KeyChar) && e.KeyChar != (char)8) { e.Handled = true; } }

private void txtLetras_KeyPress(object sender, KeyPressEventArgs e) { if (!Char.IsLetter(e.KeyChar) && e.KeyChar != (char)8) { e.Handled = true; } } private void txtPersonalizado_KeyPress(object sender, KeyPressEventArgs e) { string cadena = "12345xyz" + (char)8; if (!cadena.Contains(e.KeyChar)) { e.Handled = true; } }

46 47 48 49

Explicacin el evento captura el carcter cuando se presiona el teclado, el metodo verifica si el caracter cumple la regla si no es asi no el evento se controla, de esat forma se bloquea el ingreso de caracteres , en parte condicional vemos la siguiente expresin: e.KeyChar != (char)8 , como se controla los caracteres generados por el teclado el Backspace debe ser permitido para poder borrar los caracteres introducidos y esta expresin condicional nos permite esta funcionalidad.

Tambien se puede usar el mismo metodo por omiscion como vemos a continuacion ?

1 private void txtPersonalizado_KeyPress(object sender, KeyPressEventArgs e) 2 { 3 string cadena = "\{}[]" + (char)8; 4 5 if (cadena.Contains(e.KeyChar)) 6 { 7 8 e.Handled = true; 9 } 10 11 } 12
por ejemplo en este caso se podrn ingresar todos los caracteres menos los siguientes: \{}[] la diferencia de este mtodo es la condicin que no es negada.

Buen da comunidad msdn, Tengo una consulta, necesito validar un login (Estoy aprendiendo recin el lenguaje C#), ya tengo setiadas las propiedades para que acepten solo caracteres numricos y texto los correspondientes textbox, el problema es que estoy utilizando errorprovider para indicar al usuario en caso de que este no cumpliera con los requisitos del textbox tales como "no vacio", y "la contrasea debe tener un mnimo de 6 caracteres", el problema real es que cuando aparece el formulario y se desea escribir el nombre de usuario y cumple con el requisito que es de 7 caracteres como mnimo l podr hacer click en otro textbox y escribir la contrasea, pero si el usuario se da cuenta de que escribi mal el nombre de usuario no se puede devolver al textbox de nombre de usuario ya que tiene que cumplir con el requisito de la contrasea que es de 6 caracteres, la idea es que el usuario pueda pasar de un textbox a otro pero siempre respetando los errorproviders indicando que est mal escrito o no cumple con los requisitos de dichos textbox. PD: Estoy utilizando los eventos validated y validating de los textbox. Y estoy utilizando el framework 4.5 Adjunto parte del cdigo.
public partial class frmLogin { private bool NoEsNombreUsuarioVacio(string txt, out string mensajeError) { if (txt.Length < 7) { mensajeError = "El nombre de usuario debe contener una longitud\nigual o mayor a 7 letras"; return false; }

if (txt.Length > 6 ) { mensajeError = ""; return true; } } }

private bool VerificatxtVacio() { foreach (var txt in this.Controls.OfType<TextBox>().OrderBy(t => t.TabIndex)) { if (string.IsNullOrEmpty(txt.Text)) { txt.Focus(); return true; } } return false; }

private void txtNombreUsuario_Validated(object sender, EventArgs e) { errorNombreUsuario.SetError(txtNombreUsuario, ""); }

private void txtNombreUsuario_Validating(object sender, CancelEventArgs e) { string mensajeError; if (!NoEsNombreUsuarioVacio(txtNombreUsuario.Text, out mensajeError)) { e.Cancel = true; txtNombreUsuario.Focus(); this.errorNombreUsuario.SetError(txtNombreUsuario, mensajeError); } }

private void btnIngresar_Click(object sender, EventArgs e) { if (!VerificatxtVacio()) { this.Close(); Principal.Start(); } } }

Agradecera enormemente la ayuda, GRACIAS!

o o

Edited by VigoLearn Wednesday, December 26, 2012 4:27 AM Edited by VigoLearn Wednesday, December 26, 2012 4:28 AM

o o

Reply Quote

All Replies
Wednesday, December 26, 2012 4:49 AM Moderator

veo que el VerificatxtVacio() lo defines en el btnIngresar_Click por lo tanto podrias usar el vacio del textbox de password, por lo que podrias usar el vacio del campo para dar por buena la validacion o sea en el txtNombreUsuario_Validating, podrias usar
if(txtNombreUsuario.Text == ""){

errorNombreUsuario.SetError(txtNombreUsuario, ""); e.Cancel = false; return;

para asi pasar la validacion si deja en blanco el textbox, total despues lo validas en el boton

saludos

Leandro Tuttini Blog Buenos Aires Argentina


o o

Marked As Answer by Ricardo RussoModerator Monday, January 07, 2013 11:55 AM

o o

Reply Quote

Wednesday, December 26, 2012 7:00 AM

Muchas gracias Leandro por tu ayuda, probar al momento el cdigo, te cuento como me fue. Muchas gracias por tu cooperacin.

o o

Reply Quote

Wednesday, December 26, 2012 10:56 AM

if (string.IsNullOrEmpty(txt.Text)) { txt.Focus(); return true; }

Creo que en esta parte, el string, debera ir con MAYUS, (String) y no con minus (string) ya que se refiere a la clase, no al tipo de dato. Un saludo

TopCoder algorythm addict! C# addict! Twitter LinkedIn Blog

Вам также может понравиться