Controlar la tecla intro en un grid
Estoy tratando de controlar las posiciones de lectura de un grid.
Para ello he puesto en el procedure keypress de la segunda celda lo siguiente:
IF NKEYCODE=13
v_cod_opera=alltrim(this.value)
IF SUBSTR(V_COD_OPERA,3,1) ='0'
WAIT WINDOW 'el 3º dÃgito sólo puede ser 2 ó 9' TIMEOUT 2
thisform.gparte.activatecell(thisform.gparte.relativerow,2)
endif
endif
Pero el cursor se me coloca sobre la siguiente casilla y yo le estoy indicando que se ponga en la misma que es la 2
¿Hay algún modo de que se elimine del buffer del teclado el caracter 13, para que no se pase al siguiente campo del grid?
Para ello he puesto en el procedure keypress de la segunda celda lo siguiente:
IF NKEYCODE=13
v_cod_opera=alltrim(this.value)
IF SUBSTR(V_COD_OPERA,3,1) ='0'
WAIT WINDOW 'el 3º dÃgito sólo puede ser 2 ó 9' TIMEOUT 2
thisform.gparte.activatecell(thisform.gparte.relativerow,2)
endif
endif
Pero el cursor se me coloca sobre la siguiente casilla y yo le estoy indicando que se ponga en la misma que es la 2
¿Hay algún modo de que se elimine del buffer del teclado el caracter 13, para que no se pase al siguiente campo del grid?
Al final lo he resuelto, poniendo una variable en el keypressed para validar el dato y asà en el Gotfocus de la siguiente celda, hago que en caso de que esa variable esté activa, vuelva a la celda anterior.
Un poco chapuza, pero de momento funciona, no se que otros problemas pueda tener.
He probado lo del return .f. y return .t., pero me daba un problema al pulsar la tecla ESC, que también controlo para pasar al campo anterior, y en este caso, no me respondÃa.
De todos modos GRACIAS a TODOS LOS QUE ME HABEIS AYUDADO.
Un poco chapuza, pero de momento funciona, no se que otros problemas pueda tener.
He probado lo del return .f. y return .t., pero me daba un problema al pulsar la tecla ESC, que también controlo para pasar al campo anterior, y en este caso, no me respondÃa.
De todos modos GRACIAS a TODOS LOS QUE ME HABEIS AYUDADO.
Cada vez que presionas enter o intentas desenfocar un text se ejecuta el evento Valid. Si en dicho evento compruebas que el texto ingresado no es correcto pones return .f. y el cursor seguirá en el mismo control; si compruebas que es correcto pones return .t. y el enfoque pasará el siguiente control.
Si, claro, creo que ya te entendi , en el ejemplo que mandas if substr(....) cuando llegas a este evento del Keypres, la caja de texto asociada al control Gird no ha actualizado el ultimo valor, es decir el datos suempre va un paso atras hasta que se presiona la tecla enter o se cambia de enfoque a otro objeto.. Si esto es correcto, la solución es el evento Interactive Change...
Saludos ... Cúcuta, Colombia
Saludos ... Cúcuta, Colombia
Hola fiancasado:
Desconosco la intension de tu codigo, pero dentro de la condicion del: IF nKeyCode=13 pon algo como esto:
KEYBOARD'{DNARROW}' && Bajara al sig. renglon.
KEYBOARD'{LEFTARROW}' && Pasara a la columna de la Izquierda.
Consulta la funcion KEYBOARD. Saludos.
Desconosco la intension de tu codigo, pero dentro de la condicion del: IF nKeyCode=13 pon algo como esto:
KEYBOARD'{DNARROW}' && Bajara al sig. renglon.
KEYBOARD'{LEFTARROW}' && Pasara a la columna de la Izquierda.
Consulta la funcion KEYBOARD. Saludos.
