CLR: .Net / Mono / Boo / Otros CLR > VB .NET
ª,º,ç,Ç, ¿como Validar Esto?
(1/1)
karolarivero:
Hola a todos:
Mi primera pregunta, ¿que son esos simbolos? los he buscado en el codigo ASCII y no aparecen. Estoy validando un textbox para que en la primera posicion no se acepten espacios en blanco, signos de puntuacion, simbolos, solo letras o numeros. Para eso tengo el siguiente codigo:
--- Código: Text --- If e.KeyChar.IsLetter(e.KeyChar) Then ' caracter alfabetico e.Handled = False ElseIf e.KeyChar.IsControl(e.KeyChar) Then ' caracter de control e.Handled = False ElseIf e.KeyChar.IsSeparator(e.KeyChar) And dig = 1 Then 'caracter separador e.Handled = True ElseIf e.KeyChar.IsSymbol(e.KeyChar) And dig = 1 Then ' Caracter de simbolo e.Handled = True ElseIf e.KeyChar.IsDigit(e.KeyChar) Then ' Digito decimal, numero e.Handled = False ElseIf e.KeyChar.IsPunctuation(e.KeyChar) And dig = 1 Then ' Signo de puntuación e.Handled = TrueEnd If
Hace lo que quiero pero no me valida estos 4 señores: º,ª,ç,Ç; opte por poner, como prueba:
--- Código: Text --- ElseIf e.KeyChar = "Ç" Then e.Handled = TrueEnd If
Al final a ver si lo validaba y no lo valida. Alguien me puede explicar que pasa ahi y como puedo validar eso.
Saludos y Gracias por su atención
Cajami:
Hola, que tal si pruebas con esto:
--- Código: Text --- Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress 'Para Ñ y ñ If Asc(e.KeyChar) = 241 OrElse Asc(e.KeyChar) = 209 Then Exit Sub 'para Numeros, Letras minusculas y mayusculas Select Case Asc(e.KeyChar) Case 0 To 47 e.Handled = True Case 58 To 64 e.Handled = True Case 91 To 96 e.Handled = True Case 123 To 255 e.Handled = True End Select End Sub
Espero te sea util, nos vemos :hola:
Nebire:
Esos 4 caracteres, son caracteres extendidos, entonces sólo te valdrá si usando el mismo juego de caracteres coincide con ellos.
Es decir debes preguntar por su código ascii y es con eso con lo que lo debes comparar, no con el símbolo ..de hecho yo ni siquiera validaría con e.keychar ya que los caracteres extendidos usan ALT + número, no recoges casos com á,é,í,ó,ú, Á,É,Í,Ó,Ú, ü , Ü que podrías aceptar.... e.keychar solo te devuelve la última tecla pulsada, por tanto si tratas de poner á te devlverá que has pulsado [shift], luego [´] y luego [a], sin embargo es sólo un carácter que requiere 3 pulsaciones.
keychar es muy bueno para validar botones basados en atajos y y teclas que 'se ven' (por ejemplo F1, escape, down, enter, etc....) cosas así, pero para validar caracteres es mejor usar la función asc() y chr() un ejemplo
--- Código: Text ---Imports vb=Microsoft.VisualBasicPrivate Sub textbox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles textbox1.TextChanged Static cadena As String = "" Dim letra As String Dim n As Short letra = VB.Right$(TextBox1.Text, 1) n = Asc(letra) If ((Asc(letra) >= Asc("0")) And (Asc(letra) <= Asc("9"))) Or ((Asc(letra) <= Asc("a")) And (Asc(letra) <= Asc("z"))) Then ' 'es correcto cadena = TextBox1.Text Else 'aquí se valoran opciones menos frecuentes y casos no válidos 'if n=letras tildadas o letras con diéresis luego 'cadena = TextBox1.Text 'else TextBox1.Text = cadena msgbox("El carácter '" & letra & "' no es válido.") beep 'end if End If End Sub Hay que tener en cuenta que esto va examinando letra a letra según se va introduciendo por el teclado, pero hay 2 situaciones en que esto no se validaría correctamente.
Esos casos son cuando el texto sea pegado y no introducido por el teclado, o bien cuando el usuario se plante en medio de una cadena válida y pulse un carácter. Para solucionar estos casos lo ideal es validar toda la cadena cada vez que el texto cambie (y no sólo el último carácter como se muestra en el código), en ese caso, la función que realiza iría en un bucle, la variable estática sobraría y el texto a devolver si hay error sería o una cadena vacía o llo verficado que es válido hasta el momento.
Si el texto a introducir es muy corto, la validación va bien en el evento textchanged, en cambio si es muy largo el texto, lo ideal es validarlo cuando el usuario finalice y pulse un botón, y en ese caso no borrarle el texto, si no en el mensaje indicarle que caracteres no son válidos...
Navegación
Ir a la versión completa