Cuál es la forma correcta de regresar el enfoque al mismo control?..

2,849 views
Skip to first unread message

TheNewInquirer

unread,
Mar 20, 2012, 12:43:24 AM3/20/12
to Comunidad de Visual Foxpro en Español
Me pasa mucho que deseo buscar o efectuar algo desde un control text y
si la busqueda no tuvo coincidencias deseo que se regrese el enfoque
al mismo control text que realizó las acciones anteriores.

Me funciona bien a veces poniendo esto en el Keypress del text al
buscar un nombre:

This.setfocus()
This.click()

Pero este mismo código a veces no funciona bien en el mismo Keypress,
si la busqueda tiene otros criterios o el dato a buscar ya no es del
mismo tipo, sobre todo cuando uso lostfocus().

Cual es la forma correcta de, cuando no hay resultados coincidentes en
una busqueda, enviar un mensaje MESSAGEBOX con un timeout de 1 segundo
y regresar el enfoque al mismo control que envio a la busqueda?...

Por cierto que no consigo borrar el caracter (ASCII) que aparece en
pantalla tras un lastkey().

En el evento click del text tiene:
this.value=""

Pero ni aun así se borro el caracter ASCII que se imprime en pantalla
tras el lastkey.

Saludos!

Walter R. Ojeda Valiente

unread,
Mar 20, 2012, 1:07:36 AM3/20/12
to publice...@googlegroups.com
Si haces tu validación en el evento LostFocus(), de esta manera funciona perfectamente:

LOSTFOCUS
--------------

* Llamar a la rutina de validación

IF ValidacionOK
     * Realizar las tareas cuando la validación tuvo éxito
ELSE
    * Realizar las tareas cuando la validación no tuvo éxito
    NODEFAULT
    This.SetFocus()
ENDIF

Como habrás visto, el secreto está en el NODEFAULT y el This.SetFocus()

Saludos.

Walter.



> Date: Mon, 19 Mar 2012 21:43:24 -0700
> Subject: [vfp] Cuál es la forma correcta de regresar el enfoque al mismo control?..
> From: thenewin...@gmail.com
> To: publice...@googlegroups.com

TheNewInquirer

unread,
Mar 20, 2012, 1:42:03 AM3/20/12
to Comunidad de Visual Foxpro en Español
Gracias Walter,

Estuve leyendo y probando lo que ya han comentado por aquí en el foro
de usar el evento Valid con:

* Antes configurar correctamente el Tab Order en el menú.

Return 0 para evitar que se mueva el enfoque a otro control.

O

Return (Thisform.textquerecibiraelenfoque)

Desafortunadamente, nada de lo anterior me funcionó.

Me falta probar lo que mencionó Edgar Acevedo:

KEYBOARD '{TAB}' + '{TAB}' + '{TAB}'

Quizás es que no comprendo bien de que se trata el método Valid.

Probaré lo que comentas del Lostfocus(), ya que mi pregunta era más
relacionada con el Lostfocus que con el Valid.

Gracias!

Jorge Javier Gutierrez

unread,
Mar 20, 2012, 4:07:44 AM3/20/12
to publice...@googlegroups.com
Hola, te paso una rutina que acostumbro utilizar cuando realizo una búsqueda:

** Método Valid de un TextBox

local lcCodigo

if !empty(this.value)
    lcCodigo = this.value
    sele viewPersonas
    requery()
    if reccount() > 0
        this.parent.txtApellido = viewPersonas.apellido
        this.parent.txtNombre = viewPersonas.nombre
    else
        messagebox("Registro no encontrado")
        this.parent.txtApellido = ""
        this.parent.txtNombre = ""
        return 0
    endif
else
    this.parent.txtApellido = ""
    this.parent.txtNombre = ""
endif

"viewPersonas" es una vista cuyo sql asociado es:
select nombre, apellido
        from Base!Personas
        where Personas.codigo=?lcCodigo

Espero te sirva.
Saludos

TheNewInquirer

unread,
Mar 20, 2012, 10:39:16 AM3/20/12
to Comunidad de Visual Foxpro en Español
Gracias Jorge,

Se ve bastante legible tu ejemplo.

Saludos!

ZeRoberto

unread,
Mar 20, 2012, 12:29:08 PM3/20/12
to publice...@googlegroups.com
El evento VALID() si retornas .F. no pierde el foco. hasta que retornes .T.
 
Saludos

TheNewInquirer

unread,
Mar 20, 2012, 1:25:59 PM3/20/12
to Comunidad de Visual Foxpro en Español
Gracias ZeRoberto,

Parece no haber fin a los trucos en VFP... jeje

Al final creo que terminaré haciendo un manual de trucos VFP by the
Spanish Community Masters jeje

Saludos!

Carlos Miguel FARIAS

unread,
Mar 20, 2012, 6:01:05 PM3/20/12
to publice...@googlegroups.com
Si valid devuelve .F. da un mensaje de error, si devuelve 0, no pierde el foco, son equivalentes en cuanto al foco, pero 0 (cero) da tira mensaje.
Saludos: Miguel, La Pampa (RA)

ZeRoberto

unread,
Mar 20, 2012, 10:02:52 PM3/20/12
to publice...@googlegroups.com
Aumentas SET NOTIFY OFF para evitar los mensajes
 
Saludos

Antonio Meza

unread,
Mar 21, 2012, 1:47:49 AM3/21/12
to publice...@googlegroups.com
Para realizar las validaciones esta el VALID para eso sirve, y el código seria algo así:

select mitabla
locate for campobuscar = this.value
if found()
    * Hacer lo que necesitas
else
    * Enviar aviso de no encontrado y regresar el focus con Return 0
     return 0
ENDIF

Y listo así de sencillo es programar usando el valid en cualquier control que necesites validar información.

saludos

TheNewInquirer

unread,
Mar 21, 2012, 10:50:44 AM3/21/12
to Comunidad de Visual Foxpro en Español
Super!! Gracias por el curso de trucos jeje Sigo pensando que
terminaré poniendo todos los trucos que aprenda en un libro.

Que tal si le ponemos:

a ver a ver... "Fundamentos de Visual Foxpro. El humilde manual de un
aprendiz".

Saludos!

TheNewInquirer

unread,
Mar 21, 2012, 11:35:10 AM3/21/12
to Comunidad de Visual Foxpro en Español
Perfecto! Funciona muy bien en el evento valid como dice Antonio Meza.

Funciona tan bien que ahora ni siquiera puedo hacer click sobre el
boton "Cancelar", si el usuario no logra encontrar lo que busca jeje.
Se queda "ciclado" hasta que el usuario encuentre algo...

Alguna otra solución a este detallito..

Aunque creo que ya entendí para que sirve Valid() y pienso que con
esto podré inventar mi propio truco para "escapar de ese valid" jeje

Saludos!

TheNewInquirer

unread,
Mar 21, 2012, 11:52:27 AM3/21/12
to Comunidad de Visual Foxpro en Español
Ahhh.. ya...! Es que el famoso valid exige que primero vaya la
condición que resulta cierta y luego la que no resulta cierta para que
acepte todos los Return 0,1,2,3 etc. y deje presionar otro boton como
"Cancelar".

En mi caso, como mi condición era al reves (si encuentra el número de
cliente, no cambies el enfoque e indica que ya existe), la solución es
simple:

IF !FOUND()

Usar ! (Not) para provocar la condición invertida. Con eso puedo
retornar el enfoque a cualquier número de control y cerrar con el
boton cancelar.

Listo, ya quedó!!

Carlos Miguel FARIAS

unread,
Mar 21, 2012, 12:31:11 PM3/21/12
to publice...@googlegroups.com
En el valid, si el usuario no tipeo nada, no quiere buscar nada y por
lo tanto al dar enter con el campo de busqueda vacia, perfectamente el
valid para ese caso puede responder 1 u otro numero positivo para que
el foco se pase al control cancelar
(si por ejemplo tenes el cuadro de texto y al boton cancelar, si valid
del cuadro devuelve 1 o .t. se posiciona en el boton cancelar).
Siempre en los valid si tiene que prever algún modo de "safar" y no
quedar en bucle infinito.

Saludos: Miguel, La Pampa (RA)


El 21/03/12, TheNewInquirer <thenewin...@gmail.com> escribió:

ZeRoberto

unread,
Mar 21, 2012, 12:33:31 PM3/21/12
to publice...@googlegroups.com
Yo prefiero validar al final ingreso todo los textbox sin validar y antes de grabar llamo a una funcion ValidarEntrada() y chequeo si todo esta en orden entonces grabo, de lo contrario hago un setfocus al text que no esta validado.

Saludos

Guillermo MDQ

unread,
Mar 21, 2012, 2:30:33 PM3/21/12
to publice...@googlegroups.com
Para poder salir del evento Valid sin quedarse en un bucle infinito,  si por ejemplo tenemos un boton llamado "cmdCancelar", se puede hacer de esta forma:

IF Mdown()
   loObj=SYS(1270)
   IF Vartype(loObj)='O' AND loObj.Name="cmdCancelar"
      loObj = NULL
      Thisform.Release
   ENDIF
ENDIF

Y asi tambien si queremos salir presionando el boton cerrar (la cruz) del formulario:

IF Thisform.ReleaseType>0
    Thisform.Release
ENDIF

Saludos
Guillermo






El martes 20 de marzo de 2012 01:43:24 UTC-3, TheNewInquirer escribió:

Jorge Javier Gutierrez

unread,
Mar 21, 2012, 3:51:50 PM3/21/12
to publice...@googlegroups.com
Hola, es que TheNewInquirer se refiera a validar cuando se ingrese un dato para búsqueda.
Lo que ud indica creo que se hace para validar (o controlar) si se ha ingresado los datos necesarios u obligatorios.

Saludos

TheNewInquirer

unread,
Mar 22, 2012, 12:46:28 AM3/22/12
to Comunidad de Visual Foxpro en Español
Así es... En mi caso desde el inicio me gusta validar si el numero de
cliente o el numero de lo que sea... ya estaba registrado en la tabla
para evitar duplicados. Si ya está, de una vez "le evita al usuario"
todo el "merequetengue" de capturar los datos solo para que al final
le diga lo que hacen los sistemas web con el javascript (creo)...:
"dice mi mama que siempre no" jeje

En lo personal no quiero un sistema que "haga perder el tiempo" al
usuario.

Hay varias cosas del paradigma web que tal vez se usen así porque esa
es la forma en que trabajan esos sistemas.

Aunque en el web, el "pedir que se teclee un código de confirmación"
en pantalla para evitar que un "robot de la web" escriba datos
automaticamente en las páginas es una buena práctica de seguridad, es
bastante molesto para el usuario.

Muchas veces tengo que dar "soporte" a algunos usuarios comunes y
corrientes (no técnicos en sistemas), sobre estas "nimiedades".

Ahora bien, si se tratara de información "critica" como la informacion
financiera o bancaria, si estoy de acuerdo con teclear "cualquier
clase de candado, código, etc" que sea estrictamente necesario.

Pero quizás es que ZeRoberto hace la validación con un excelente fin..
corregir datos erroneos que pudieran contener errores que afecten la
operación posterior del sistema y eviten generar "consultas" que no
encuentran datos, etc.

Excelente!! Funciona para el..

Saludos!

Walter R. Ojeda Valiente

unread,
Mar 22, 2012, 1:01:50 AM3/22/12
to publice...@googlegroups.com
Desde mi punto de vista lo correcto es lo siguiente:
- Cada campo es validado cuando el usuario sale de él
- Antes de grabar, se vuelven a validar todos los campos, sin excepción

De esta manera, siempre evito que se graben en las tablas datos erróneos (que es lo más importante de todo) y además el usuario al instante sabe que escribió algo mal.

Saludos.

Walter.




> Date: Wed, 21 Mar 2012 21:46:28 -0700
> Subject: [vfp] Re: Cuál es la forma correcta de regresar el enfoque al mismo control?..
> From: thenewin...@gmail.com
> To: publice...@googlegroups.com
>

TheNewInquirer

unread,
Mar 22, 2012, 2:31:59 AM3/22/12
to Comunidad de Visual Foxpro en Español
Perfecto!.. Suena a otra buena práctica de programación. Copiado y
anotado !

Saludos!

Carlos Miguel FARIAS

unread,
Mar 22, 2012, 11:29:55 AM3/22/12
to publice...@googlegroups.com
Coincido con Walter.
Ademas, antes de grabar, se deberían chequear la consistencia de todo
el registro o transaccion contrastado contra las reglas del negocio, o
sea, los campos individualemente podrán ser corrctos de su dominio de
valores, pero no ser coherentes entre si.
P.e. Producto: botellas. Cantidad: 1.5, Unidad de medida: unidades o
sea 1.5 no pueden ser unidades o botellas no puede ser 1 y 1/2, la 1/2
estaría rota?
En la web, lo que se hace es validar con un Captcha al usuario al
loguearse (al menos) y luego se puede repedir con datos criticos, eso
evita los robots.

Saludos: Miguel, La Pampa (RA)

quaeritur et quaeritur iterum, relictis non dubium


El 22/03/12, TheNewInquirer <thenewin...@gmail.com> escribió:

Jorge Javier Gutierrez

unread,
Mar 22, 2012, 12:24:49 PM3/22/12
to publice...@googlegroups.com
Coincido totalmente, y es la manera de cómo yo lo hago en mis formularios de ingreso de datos.

Saludos


El jueves 22 de marzo de 2012 02:01:50 UTC-3, Walter R. Ojeda Valiente escribió:
Desde mi punto de vista lo correcto es lo siguiente:
- Cada campo es validado cuando el usuario sale de él
- Antes de grabar, se vuelven a validar todos los campos, sin excepción

De esta manera, siempre evito que se graben en las tablas datos erróneos (que es lo más importante de todo) y además el usuario al instante sabe que escribió algo mal.

Saludos.

Walter.




> Date: Wed, 21 Mar 2012 21:46:28 -0700
> Subject: [vfp] Re: Cuál es la forma correcta de regresar el enfoque al mismo control?..
> From: thenewin...@gmail.com

extremo

unread,
Mar 22, 2012, 12:30:36 PM3/22/12
to Comunidad de Visual Foxpro en Español
hola.....

Yo tambien hago lo mismo, ademas le agregue el asterisco (*) a ls
campos que son obligatorios tal como se hace en internet, asi es mas
facil para el usuario y no tengo que estar dando tantas explicaciones
de como usar el sistema.

Bendiciones

On 22 mar, 12:24, Jorge Javier Gutierrez
<jorgejaviergutier...@gmail.com> wrote:
> Coincido totalmente, y es la manera de cómo yo lo hago en mis formularios
> de ingreso de datos.
>
> Saludos
>
> El jueves 22 de marzo de 2012 02:01:50 UTC-3, Walter R. Ojeda Valiente
> escribió:
>
>
>
>
>
>
>
>
>
> >  Desde mi punto de vista lo correcto es lo siguiente:
> > - Cada campo es validado cuando el usuario sale de él
> > - Antes de grabar, se vuelven a validar todos los campos, sin excepción
>
> > De esta manera, siempre evito que se graben en las tablas datos erróneos
> > (que es lo más importante de todo) y además el usuario al instante sabe que
> > escribió algo mal.
>
> > Saludos.
>
> > Walter.
>
> > > Date: Wed, 21 Mar 2012 21:46:28 -0700
> > > Subject: [vfp] Re: Cuál es la forma correcta de regresar el enfoque al
> > mismo control?..
> > > From: thenewinquire...@gmail.com
> > > To: publice...@googlegroups.com

Walter R. Ojeda Valiente

unread,
Mar 22, 2012, 2:01:00 PM3/22/12
to publice...@googlegroups.com
Vaya, ésto sí que es raro pero coincido con el tal "extremo", yo desde hace un par de años o algo así a todos los campos obligatorios les coloco un asterisco al final.

La verdad es que facilita explicarle al usuario lo que debe hacer.

Saludos.

Walter.



> Date: Thu, 22 Mar 2012 09:30:36 -0700

> Subject: [vfp] Re: Cuál es la forma correcta de regresar el enfoque al mismo control?..

Walter R. Ojeda Valiente

unread,
Mar 22, 2012, 2:06:07 PM3/22/12
to publice...@googlegroups.com
Corrección, debía decir desde hace 8 años.

Saludos.

Walter.




From: wr...@hotmail.com
To: publice...@googlegroups.com
Subject: RE: [vfp] Re: Cuál es la forma correcta de regresar el enfoque al mismo control?..
Date: Thu, 22 Mar 2012 18:01:00 +0000

Douglas Sánchez Guillén

unread,
Mar 22, 2012, 4:36:10 PM3/22/12
to publice...@googlegroups.com

Walter para mi todo indica que esto del matrimonio te esta suavisando, y estas empezando a coincidir con Extremo, al rato hasta te salis casando por la Iglesia mas adelante, no crees?

Yo en mi caso pongo un asterisco al grande a la par de los textbox o combo etc y lo pongo visible solo cuadno lo dejan en blanco y presionan enter al final si dan clic en guardar los envia al objeto segun el orden ya que pueden dejar varios en blanco.

Saludes

extremo

unread,
Mar 22, 2012, 4:58:44 PM3/22/12
to Comunidad de Visual Foxpro en Español
no molesten porque ese tal "Walter" prende con cualquier cosa :)


On 22 mar, 16:36, Douglas Sánchez Guillén <douglas...@gmail.com>
wrote:

Daniel Sánchez

unread,
Mar 22, 2012, 8:11:06 PM3/22/12
to publice...@googlegroups.com
Se nota que andan aburridos en le grupo y no ven el momento de hacerles recordar sus batallas epicas en el foro, lo que pasa que a muchos les gusta de vez en cuando ver llegar sangre al rio, y cuando no llega naturalmente pues porque no, hay que forzarlo.

Saludos

--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047
Trujillo - Perú

Walter R. Ojeda Valiente

unread,
Mar 24, 2012, 10:38:03 AM3/24/12
to publice...@googlegroups.com
Hola Douglas

El hecho de haber coincidido en algo de programación con el tal extremo no implica que también coincidiré en otros temas, él es demasiado irracional, no hace mucho por el Messenger me dijo que tendré una experiencia dolorosa, le pregunté cuando sería eso, la fecha exacta, la hora exacta, el lugar exacto y el hecho exacto y ¿sabes que contestó? que alguna vez ocurrirá.

Así que le volví a preguntar ¿será dentro de un día? ¿de dos días? ¿de cuarenta años? y me respondió: "dentro de mil años"

Bueno, cuando eso todos los seres humanos que estamos vivos ahora ya seremos polvo así que su profecía vale cero porque es totalmente incomprobable. Tendría que profetizar algo que podamos comprobar en un tiempo razonable, digamos como máximo una semana. Pero por supuesto que no podrá hacerlo, solamente podría hacer eso si su dios realmente existiera pero como no es el caso entonces no podrá. Nunca jamás un dios profetizó algo exacto, siempre fueron vaguedades como "habrá guerras", "habrá hambre", "habrá terremotos" cosa que cualquier nenito de diez años que jamás haya escuchado hablar de su dios también podría decirlo. Ni Júpiter, ni Osiris, ni Jehová ni Jesús ni ningún otro de los miles de dioses inventados ha profetizado algo exacto y si alguno de ellos hubiera existido entonces lo hubiera hecho, ya que sería una prueba irrefutable de su existencia, algo que todos los dioses quieren conseguir, ya que esa sería la mayor ambición de cualquier dios, que todos los seres humanos creyeran en él.

Experiencias dolorosas todo el mundo puede tenerlas alguna vez, nadie está a salvo de eso, así que lo que dijo extremo no sirve como profecía, más aún cuando te dice que ocurrirá "en mil años". Así es muy fácil ser profeta, yo también te puedo profetizar cualquier cosa por más imposible que parezca y te diré que ocurrirá "dentro de mil años".

¿Quieren hacerme cambiar de idea sobre la existencia de algún dios u otro ser invisible? hagan al menos 12 profecías sobre hechos de cumplimiento normalmente imposibles, con todos los datos exactos (fecha, hora, lugar, suceso) y que se cumplirán indefectiblemente antes de un mes a contar desde hoy y allí sí podré creer que es verdad eso de la magia. Mientras tanto, son solamente supercherías para ignorantes.

Saludos.

Walter.




Date: Thu, 22 Mar 2012 14:36:10 -0600
Subject: Re: [vfp] Re: Cuál es la forma correcta de regresar el enfoque al mismo control?..
From: dougl...@gmail.com
To: publice...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages