Programación General > Visual Basic 6.0 e inferiores

 Re: Validacion de los "text"

(1/5) > >>

Cero Kull:
Hola..

Tengo unos text"" para ingresar datos a una tabla pero solo necesito letras solo letras, hasta el momento no esta fallando esa parte resulta que estoy utilizando un MDIForm y con otro formulario Hijo y resulta que no puedo validar que en los text's estos pasen sin tener nada escrito

por ejemplo utilizo esta instruccion!!!

Private Sub Text1_KeyPress(KeyAscii As Integer)
If Asc(UCase(Chr(KeyAscii))) < Asc("A") Or Asc(UCase(Chr(KeyAscii))) > Asc("Z") Then
If KeyAscii <> 8 And KeyAscii <> 13 And KeyAscii <> 209 And KeyAscii <> 241 And KeyAscii <> 34 And KeyAscii <> 225 And KeyAscii <> 233 And KeyAscii <> 237 And KeyAscii <> 32 And KeyAscii <> 243 And KeyAscii <> 250 Then
KeyAscii = 0
Beep
End If
If KeyAscii = 13 Then
If text1 = "" Then
MsgBox " INGRESE ALGO ",vbCritical
Text1.SetFocus
Else
Text1 = Trim(UCase(Text1))
Text2.SetFocus
End If
End If
End If
End Sub

Eso es para validar pero resulta que los text siguientes es donde esta el problema con el primero me da el mensaje que "ingrese algo" pero para los demas pasa solo con enter y eso no debiera pasar como lo hago

Alguien me puede ayudar... con otra RUTINa mas SIMPLE

Saludos Cero Kull®

javierbalk:
Hola Cero Kull:

No me parece que esté mal lo que hiciste, pero modifiqué tu código para hacerte la vida más sencilla.
Agrega un módulo estándar al proyecto y pega el sig. código:

'*********************************************
Public Sub ProcesarKeyPressTextSoloTexto(Keyascii As Integer, txt As TextBox)
    If Asc(UCase(Chr(Keyascii))) < Asc("A") Or Asc(UCase(Chr(Keyascii))) > Asc("Z") Then
        If Keyascii <> 8 And Keyascii <> 13 And Keyascii <> 209 And Keyascii <> 241 And Keyascii <> 34 And Keyascii <> 225 And Keyascii <> 233 And Keyascii <> 237 And Keyascii <> 32 And Keyascii <> 243 And Keyascii <> 250 Then
            Keyascii = 0
            Beep
        End If
        If Keyascii = 13 Then
            SendKeys "{TAB}"
        End If
    Else
        Keyascii = Asc(UCase(Chr(Keyascii)))
    End If
End Sub

Public Sub ProcesarLostFocusText(txt As TextBox)
    txt.Text = Trim(UCase(txt.Text))
    If txt.Text = "" Then
        MsgBox " INGRESE ALGO ", vbCritical
        txt.SetFocus
    End If
End Sub
'*********************************************

Luego en los TextBox cambia el código por el sig:

'*********************************************
Private Sub Text1_KeyPress(Keyascii As Integer)
    ProcesarKeyPressTextSoloTexto Keyascii, Text1
End Sub

Private Sub Text1_LostFocus()
    ProcesarLostFocusText Text1
End Sub
'*********************************************

De manera que ahí tienes centralizado el manejo de eso, y sólo tienes que agregar esas líneas por cada TextBox.

También notarás que hice unos cambios:
En lugar de enviar el foco al sig. control con SetFocus lo hice enviando la tecla Tab, de manera que no hace falta conocer cuál es, sólo que deberás poner bien en orden el TabIndex de cada uno para que funcione bien.

Además agregué que se pongan a mayúscula con cada letra y no solo al final.
También cambié a que luego ponga (de nuevo) todo a mayúsculas cuando pierde el foco el control, porque con el otro código si el usuario en lugar de presionar Enter presionaba Tab no se ponía a mayúscula, lo mismo si hacía click con el mouse en otro lado.

Ahora ¿para qué poner a mayúscula en el LostFocus si ya está todo mayúscula por cada pulsación? Bueno, si haces click con el botón derecho en el textbox verás que puedes copiar algo que esté en el portapapeles, es por eso, porque lo copia en minúsculas si está así.

Lo mismo con la validación por si está vacío, la puse en el LostFocus por la misma razón de más arriba (si cambia de control sin presionar Enter).

Con respecto a una rutina más simple, si es que quieres experimentar, hay una API que se llama IsAlphaNumeric que retorna 1 si el KeyAscii es un caracter alfanumérico y 0 si no lo es. Combinando esta API con IsNumeric podrías determinar si es un caracter de letra o no.

La declaración es:

Public Declare Function IsAlphaNumeric& Lib "user32" Alias "IsCharAlphaNumericA" (ByVal cChar As Byte) ' Si son letras o números devuelve 1, sino devuelve 0

Y se usa:

If IsAlphaNumeric(KeyAscii) = 1...

Espero que te haya ayudado.

Saludos,
Javier

Cero Kull:
Gracias Javier!!!

Sabes me quedo una pregunta que pasa al pasar porlos otros text's y le doy la tecla tab se supone que reclamara por el losfocus delsiguente text's  no lo crees??? mira no he tenido tiempo para terminar de revisarlo completo., ya que he estado muy ocupado..pero lo hare...


nos vemos amigo y gracias..

Atte.,  CeroKul

javierbalk:
Hola Cero Kull:

Y no, porque el lostfocus lo que hace es validar lo que tiene el y no los otros texts.
No lo he probado mucho, sino solo que modifiqué tu código, pero supongo que debe andar bien.
Si llegás a detectar algún problema lo solucionamos.

Saludos,
Javier

Cero Kull:
Javier !!!

Sabes he estado revisando la mofificacion que me hiciste pero, no di con el problema, con la
solucion del problema que tiene el codigo., ojala que no lo tenga y que yo lo este utilizando mal

1.- DESCRIPCION DEL PROBLEMA.

*****Ok. deje esto en un modulo **********************

Public Sub ProcesarKeyPressTextSoloTexto(Keyascii As Integer, txt As TextBox)
If Asc(UCase(Chr(Keyascii))) < Asc("A") Or Asc(UCase(Chr(Keyascii))) > Asc("Z") Then
If Keyascii <> 8 And Keyascii <> 13 And Keyascii <> 209 And Keyascii <> 241 And Keyascii <> 34 And Keyascii <> 225 And Keyascii <> 233 And Keyascii <> 237 And Keyascii <> 32 And Keyascii <> 243 And Keyascii <> 250 Then
Keyascii = 0
Beep
End If
If Keyascii = 13 Then
SendKeys "{TAB}"
End If
Else
Keyascii = Asc(UCase(Chr(Keyascii)))
End If
End Sub

Public Sub ProcesarLostFocusText(txt As TextBox)
txt.Text = Trim(UCase(txt.Text))
If txt.Text = "" Then
MsgBox "Ingrese datos pedidos ", vbCritical
txt.SetFocus
End If
End Sub

Todo lo de arriba esta un un modulo., y luego lo llamo desde con esta instrucion

INSTRUCCION***

Private Sub Text1_KeyPress(Keyascii As Integer)
ProcesarKeyPressTextSoloTexto Keyascii, Text1
End Sub

Private Sub Text1_LostFocus()
ProcesarLostFocusText Text1
End Sub
*********************

Hasta esto funciona bien, cual es el problema .??
cuando copio el esta instrucion pero cambiando lo text's osea ASI
*****************************
Private Sub Text2_KeyPress(Keyascii As Integer)
ProcesarKeyPressTextSoloTexto Keyascii, Text2
End Sub

Private Sub Text2_LostFocus()
ProcesarLostFocusText Text2
End Sub
*****************
Sucede el siguiente problema resulta que se queda pegado y no deja dejar de ejecutarse
la instruccion.
Ademas cuando coloco un boton para llamar otro formulario (con un boton Volver por ejemplo)
se queda hay, o me da el mensaje que ingrese algo al text.

Sabes lo intente pero no pude solucionarlo, me podrias ayudar...


Saludos de  Cero Kull®
B)

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa