Evento KeyPress (Enter)

29/03/2007 - 19:48 por Luis | Informe spam
Qué tal?? he intentado aplicar el siguiente código para el evento
KeyPress en un formulario, aplicandolo a la tecla enter, cuando lo
ejecuto y presiono esta tecla simplemente va a siguiente textbox, la
verdad no sé que estoy haciendo mal pues tengo entendido que el
KeyAscii correspondiente es el 13. Si pueden ayudarme les agradecería
mucho!!!

Private Sub txtIdentificacion_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
If KeyAscii = 13 Then
If txtIdentificacion.Text <> "" Then
ValidaDocumento txtIdentificacion.Text
Else
MsgBox "Debe ingresar el codigo"
End If
End If
End Sub

Preguntas similare

Leer las respuestas

#6 Héctor Miguel
31/03/2007 - 01:10 | Informe spam
hola, Luis !

... acabo de poner un punto de inspección en: If txtIdentificacion.Text <> "" Then
... y jamás pasa por allí, es como si no reconociera a la tecla enter con el ascii 13 ...



el evento 'keypress' [generalmente] se usa para 'validar' las entradas 'imprimibles' [caracteres ascii]
para el efecto que necesitas de 'liberar' el enfoque al presionar enter...
______
Private Sub txtIdentificacion_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then
If txtIdentificacion.Text <> "" Then
ValidaDocumento txtIdentificacion.Text
Else
MsgBox "Debe ingresar el codigo"
End If
End If
End Sub

nota: no se alcanza a 'ver' que es lo que hace el procedimiento ValidaDocumento -???-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#7 Luis
03/04/2007 - 00:14 | Informe spam
Héctor Muchas Gracias!!! probé el código y sirve a la perfección!!
Ahhh con respecto a tú pregunta ValidaDocumento es un procedimiento
que determina si el número de identificación ingresado en el textbox
es válido de acuerdo a ciertas restricciones que hay sobre los mismos
en mi país y lo que hace es que dado un número indica si este es
válido o no a través de un mensaje... Tan sólo hay un detalle que me
gustaría me ayudes a solucionar.. cuando ingreso un número de
identificación NO VÁLIDO se me indica a través de un mensaje que no lo
es, peeeero igual pierde el enfoque... me gustaría que esto suceda
sólo si el número de identificación SI ES VÁLIDO, es decir que no se
pueda salir del control mientras no se ingrese uno válido Saludos
y Muchísimas Gracias nuevamente..
Respuesta Responder a este mensaje
#8 Héctor Miguel
03/04/2007 - 06:02 | Informe spam
hola, Luis !

... ValidaDocumento es un procedimiento que determina si el numero de identificacion
ingresado en el textbox es valido... o no a traves de un mensaje
... hay un detalle que... solucionar.. cuando ingreso un numero... NO VALIDO
... indica a traves de un mensaje que no lo es, pero igual pierde el enfoque
... me gustaría que esto suceda solo si el numero de identificación SI ES VALIDO
es decir que no se pueda salir del control mientras no se ingrese uno valido



1) ya comprobaste que el evento '_exit' puede impedir que el usuario 'abandone' un control
-> mientras 'el control' tenga el foco
-> otra forma de 'devolver' el foco a un control que lo haya perdido es una instruccion del tipo: <objeto>.SetFocus
-> si tienes forma de identificar cual control se esta 'validando'... utiliza la instruccion con un 'SetFocus'

2) dado que el usuario puede cambiar de control NO 'necesariamente' hacia 'el siguiente' [en un orden pre-supuesto]
y como no es 'claro' si el procedimiento 'ValidaDocumento' lo mantienes separado para usarlo con varios controles...
-> si NO tienes forma de identificar el control... necesitaras 'mover' las instrucciones de validacion al evento '_exit'

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#9 Luis
16/05/2007 - 01:19 | Informe spam
Héctor he usado el siguiente código:

Private Sub txtIdentificacion_KeyDown(ByVal KeyCode As
MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then
If txtIdentificacion.Text <> "" Then
ValidaDocumento txtIdentificacion.Text
Else
MsgBox "Debe ingresar el ID"
End If
End If
End Sub

Private Sub txtIdentificacion_Exit(ByVal Cancel As
MSForms.ReturnBoolean)
Cancel = Trim(txtIdentificacion) = ""
End Sub

El código de ValidaDocumento es bastante extenso pero suponiendo que
sea el siguiente:

Sub ValidaDocumento(Pcedula As String)

If Len(Trim(Pcedula)) >= 10 Then
msgbox "ID Válido"
textbox1.SetFocus 'pasa al siguiente TextBox
else
msgbox "ID no válido"
txtIdentificacion.SetFocus 'No cambia el foco
End if

End Sub

Funciona bien en el sentido que no me permite salir de
txtIdentificación mientras no ingrese un número, pero si el número
ingresado es válido o no igual pasa al siguiente textbox (TextBox1).
Mi intención es que el usuario:
1. No pueda salir del TextBox mientras no ingrese un número.
2. No pueda salir del TextBox mientras el número ingresado no pase la
prueba de ValidaDocumento, para nuestro supuesto que la longitud de la
cadena sea mayor o igual a 10. O mejor dicho que no pueda hacer NADA
si el ID ingresado en txtIdentificacion no es Válido.

Muchas Gracias por tú valiosa ayuda!!
Respuesta Responder a este mensaje
#10 Héctor Miguel
16/05/2007 - 01:49 | Informe spam
hola, Luis !

1) si es necesario un [sub] procedimiento para 'validar' que la entrada de un textbox sea 'valida'...
supongo que podrian ser tambien diferentes las condiciones para validar uno u otro textbox segun... ???

2) lo 'intrigante' pudiera ser si vas a 'forzar' un avance al 'textbox1' como 'siguiente'... [siempre ???]
de lo contrario... como puedes estar seguro de a cual control tiene intenciones de cambiarse el usuario ?

3) prueba a evitar la salida del control uniendo las condiciones [para el caso especifico de este ejemplo] con algo como:

Private Sub txtIdentificacion_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = Trim(txtIdentificacion) = "" Or Len(Trim(txtIdentificacion)) < 10
If Cancel Then MsgBox "Entrada no valida !!!"
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
... he usado el siguiente codigo:
Private Sub txtIdentificacion_KeyDown(ByVal KeyCode As
MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then
If txtIdentificacion.Text <> "" Then
ValidaDocumento txtIdentificacion.Text
Else
MsgBox "Debe ingresar el ID"
End If
End If
End Sub

Private Sub txtIdentificacion_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = Trim(txtIdentificacion) = ""
End Sub

El codigo de ValidaDocumento es bastante extenso pero suponiendo que sea el siguiente:

Sub ValidaDocumento(Pcedula As String)
If Len(Trim(Pcedula)) >= 10 Then
msgbox "ID Válido"
textbox1.SetFocus 'pasa al siguiente TextBox
else
msgbox "ID no válido"
txtIdentificacion.SetFocus 'No cambia el foco
End if
End Sub
Funciona bien en el sentido que no me permite salir de txtIdentificacion mientras no ingrese un numero
pero si el numero ingresado es valido o no igual pasa al siguiente textbox (TextBox1). Mi intencion es que el usuario:
1. No pueda salir del TextBox mientras no ingrese un numero.
2. No pueda salir del TextBox mientras el numero ingresado no pase la prueba de ValidaDocumento
para nuestro supuesto que la longitud de la cadena sea mayor o igual a 10.
O mejor dicho que no pueda hacer NADA si el ID ingresado en txtIdentificacion no es Valido.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida