• Viernes 3 de Mayo de 2024, 12:36

Autor Tema:  ª,º,ç,Ç, ¿como Validar Esto?  (Leído 2031 veces)

karolarivero

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
ª,º,ç,Ç, ¿como Validar Esto?
« en: Viernes 13 de Julio de 2007, 15:34 »
0
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
  1.  
  2. If e.KeyChar.IsLetter(e.KeyChar) Then ' caracter alfabetico
  3.             e.Handled = False
  4.         ElseIf e.KeyChar.IsControl(e.KeyChar) Then ' caracter de control
  5.             e.Handled = False
  6.         ElseIf e.KeyChar.IsSeparator(e.KeyChar) And dig = 1 Then 'caracter separador
  7.             e.Handled = True
  8.         ElseIf e.KeyChar.IsSymbol(e.KeyChar) And dig = 1 Then  ' Caracter de simbolo
  9.             e.Handled = True
  10.         ElseIf e.KeyChar.IsDigit(e.KeyChar) Then ' Digito decimal, numero
  11.             e.Handled = False
  12.         ElseIf e.KeyChar.IsPunctuation(e.KeyChar) And dig = 1 Then ' Signo de puntuación
  13.             e.Handled = True
  14. End If
  15.  
  16.  
  17.  
 


Hace lo que quiero pero no me valida estos 4 señores: º,ª,ç,Ç; opte por poner, como prueba:

Código: Text
  1.  
  2. ElseIf e.KeyChar = "Ç" Then
  3.             e.Handled = True
  4. End If
  5.  
  6.  

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
MCRS

Cajami

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: ª,º,ç,Ç, ¿como Validar Esto?
« Respuesta #1 en: Viernes 13 de Julio de 2007, 16:44 »
0
Hola, que tal si pruebas con esto:

Código: Text
  1.     Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
  2.         'Para Ñ y ñ
  3.         If Asc(e.KeyChar) = 241 OrElse Asc(e.KeyChar) = 209 Then Exit Sub
  4.  
  5.         'para Numeros, Letras minusculas y mayusculas
  6.         Select Case Asc(e.KeyChar)
  7.             Case 0 To 47
  8.                 e.Handled = True
  9.             Case 58 To 64
  10.                 e.Handled = True
  11.             Case 91 To 96
  12.                 e.Handled = True
  13.             Case 123 To 255
  14.                 e.Handled = True
  15.         End Select
  16.     End Sub
  17.  

Espero te sea util, nos vemos  :hola:
Lima - Perú

-------------------------------------------------------------------------------------------------------
"Persigue tus metas, tus objetivos, tus sueños, nunca t rindas si t caes 1000 veces levantat 1000 veces y sigue adelante..."

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: ª,º,ç,Ç, ¿como Validar Esto?
« Respuesta #2 en: Viernes 13 de Julio de 2007, 17:46 »
0
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
  1. Imports vb=Microsoft.VisualBasic
  2. Private Sub textbox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles textbox1.TextChanged
  3.        Static cadena As String = ""
  4.         Dim  letra As String
  5.         Dim n As Short
  6.  
  7.         letra = VB.Right$(TextBox1.Text, 1)
  8.         n = Asc(letra)
  9.         If ((Asc(letra) >= Asc("0")) And (Asc(letra) <= Asc("9"))) Or ((Asc(letra) <= Asc("a")) And (Asc(letra) <= Asc("z"))) Then
  10.         '    'es correcto
  11.             cadena = TextBox1.Text
  12.         Else     'aquí se valoran opciones menos frecuentes y casos no válidos
  13.             'if n=letras tildadas o letras con diéresis luego
  14.                    'cadena = TextBox1.Text
  15.             'else
  16.                   TextBox1.Text = cadena
  17.                   msgbox("El carácter '" & letra & "' no es válido.")
  18.                   beep
  19.             'end if
  20.         End If
  21.     End Sub
  22.  
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...
«Ma non troppo»
----> ModoVacaciones = False<----