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

[0] Índice de Mensajes

Ir a la versión completa