de form hijo a form padre se regresa el focus sin salir.....

1,313 views
Skip to first unread message

angel_pub

unread,
Aug 18, 2012, 12:45:25 PM8/18/12
to publice...@googlegroups.com

hola buen dia a todo el grupo:

tengo un pequeno problema y agradezco las sugerencias que me puedan brindar, programo en Win 7 Pro, Mysql y VFP 9 SP 2.

Tengo un form Padre con las siguientes caracteristicas:
AlwaysonTop = F
ShowWindow = 1 in Top Level Form
Window Type = 1 Modal
DeskTop = F

de ahi se manda llamar un form hijo para captura con las siguientes caracteristicas:
AlwaysonTop = T
ShowWindow = 1 in Top Level Form
Window Type = 1 Modal
DeskTop = F

la situacion es que hago la captura en el form hijo y guardo los datos de manera correcta, tengo un boton oculto donde despues de guardar limpio la forma, y le asigno el focus a mi primer campo del form hijo como se muestra en las imagenes, pero no se porque o donde, no he logrado dar con ello, el Foco regresa al form Padre dejandome el form hijo abierto, lo cual es un problema porque tengo que cerrar el form padre para irme al hijo y seguir trabajando y cerrarlo o cerrarlo.

ya revise el foro y he seguido algunas sugerencias pero me sigue pasando lo mismo, asi que cualquier pista para resolverlo es bienvenida....
he revisado el orden de tabulacion y es correcto, adjunto codigo de guardar y limpiar

Codigo de Guardado:
codigo....
ultima linea
thisform.command3.click

Codigo de boton oculto command3
* limpiar forma
Thisform.paciente.Value = 0
Thisform.fecha._Value = Date()
Thisform.obs.Value = ""
Thisform.idNUM.Value = 0
Thisform.nom_pac.Value = ""
Thisform.paciente.SetFocus

alguna sugerencia de que pudiera estar equivocado???

a todos gracias por sus amables respuestas, saludos.
angel


imagen1.png
Imagen2.png

leonardo trujillo

unread,
Aug 18, 2012, 1:02:23 PM8/18/12
to publice...@googlegroups.com

Cuando te pases del hijo al padre tienes que hacerle un release. Si te entendí bien y quieres que no te muestre más el hijo

--
 
 
 

angel_pub

unread,
Aug 18, 2012, 1:07:33 PM8/18/12
to publice...@googlegroups.com

mas bien quiero seguir quedandome en el hijo porque es una pantalla de captura de N movimientos.....thks por contestar

Hugo C.

unread,
Aug 18, 2012, 1:32:31 PM8/18/12
to publice...@googlegroups.com
Intenta cambiando estas propiedades del padre

ShowWindow = 0 in Screen
Window Type = 0 Modeless 

Saludos.

Guillermo MDQ

unread,
Aug 18, 2012, 3:12:31 PM8/18/12
to publice...@googlegroups.com
No sera porque haces el Setfocus al textbox paciente y este esta deshabilitado ? (o sea con la propiedad Enabled=.F.) y por eso no te toma el foco.

Saludos
Guillermo

Claudio Luna

unread,
Aug 18, 2012, 4:29:57 PM8/18/12
to publice...@googlegroups.com
Angel,
En el load del form hijo podrías hacer algo como esto :
With This
If Type( "_Screen.ActiveForm" ) = "O"
.oParentForm = _Screen.ActiveForm
Else
.oParentForm = Null
Endif
Endwith
siendo oParentform una propiedad de tu formulario hijo, de ahí en mas tenes en oParentform todos los objetos del mismo si quisiera poner el foco en el text1 por ejemplo harias algo así :
oparentform.text1.setfocus

Espero que te sirva.

Saludos

Claudio


--
 
 
 

Walter R. Ojeda Valiente

unread,
Aug 18, 2012, 5:05:27 PM8/18/12
to publice...@googlegroups.com
Para que no se vea el form hijo pero puedas continuar accediendo a sus métodos y propiedades usa el método HIDE() del formulario.

Saludos.

Walter.





Date: Sat, 18 Aug 2012 09:45:25 -0700
From: amls....@gmail.com
To: publice...@googlegroups.com
Subject: [vfp] de form hijo a form padre se regresa el focus sin salir.....
--
 
 
 

Víctor Hugo Espínola Domínguez

unread,
Aug 18, 2012, 6:13:10 PM8/18/12
to publice...@googlegroups.com
Hola  Angel_pub

Utiliza la técnica que te indicó Claudio y en el botón GRABAR del formulario hijo invocas un método del formulario padre que se encargue de regenerar el grid.
Como alternativa te comento que lo que tú pretendes es más fácil de implementar con PageFrames en un sólo formulario.
Otra forma está documentada en el pdf adjunto, material confeccionado por Miguel Ángel Antúnez.

Saludos.
Víctor.

--
 
 
 

VFP & SQL SERVER.pdf

angel_pub

unread,
Aug 18, 2012, 8:08:37 PM8/18/12
to publice...@googlegroups.com

Bueno gracias a todos por responder les cuento que lo que me funciono hasta ahorita es lo de cambiar en el form padre la propiedad:


Window Type = 0 Modeless 

la respuesta que me dio hugo, en la primera pasada me pone el focus en el padre pero me permite moverme al hijo y como el hijo esta el frente es cuestion de un click y listo y en las pasadas 2,3,4,.... etc ya se queda en el focus correcto, porque funciona asi???? la verdad no lo se..... pero eso es mejor de a como estaba al principio

me falta probar lo de:


En el load del form hijo podrías hacer algo como esto :
With This
If Type( "_Screen.ActiveForm" ) = "O"
.oParentForm = _Screen.ActiveForm
Else
.oParentForm = Null
Endif
Endwith

de claudio luna...... eso me parece un poco mas elaborado..... pero lo probare a ver que sale.... muchas gracias a todos los que han respondido....

saludos a todos....
angel

FidelJ

unread,
Aug 19, 2012, 11:33:24 AM8/19/12
to publice...@googlegroups.com
1) Usa WindowType=1 solamente si querés detener los procesos hasta que se resuelva el tema del Form en WindowType=1. 
2) En el caso que planteas, probablemente se hubiera resuelto mejor con un Conjunto de Formularios. Pero si no te gusta (a mí no me gusta), tendrás que resolver el tema de otra forma.
2.1) No informas cómo y dónde se convoca a formulario hijo. La primera vez de tu última prueba se pasa por alto el foco, lo que sugiere que el formulario se lanza desde (o antes) del evento Init. 
En el evento init del Formulario padre, podés incorporar dos propiedades
Thisform.Addproperty("gaMatriz[1]")
Thisform.Addproperty("IsInit",.t.)
En en el Evento Activate del formulario padre
if Thisform.IsInit
 do form fhijo NAME Thisform.gaMatriz[1] LINKED
* si tengo que lanzar otros hijos
 ndim=alen(thisform.gamatriz)
 do form fHijo2 name thisform.gamatriz[ndim] LINKED
 DIMENSION Thisform.gaMatriz(ndim+1)
 thisform.IsInit=.f.
endif
Thisform.IsInit es una bandera para evitar que se vuelvan a lanzar los formularios que convoquemos en Activate cade vez que el formulario recibe foco.

Si quieres hacer algo fácil, podés poner en el formulario padre un botón falso, que debe tener el foco en primer orden, que debe estar Enabled=.t., Visible=.t.. En el código de GotFocus ponés
 release fhijo
 public fhijo
 Do Form FormularioHijo NAME fHijo LINKED
 this.visible=.f.

Si necesitas controlar algo del formulario hijo desde el padre, probablemente debas asignar una variable pública a la creación del formulario hijo en lugar del array.
 Release ofMijo
 public ofMijo
 Do form Formulariohijo NAME ofMijo LINKED
Ahora, el formulario hijo se llama ofMijo. La única precaución es que en el Destroy del formulario padre, hay que agregar este código:
Release ofMijo (con lo que se cierra el formulario hijo al cerrar el padre).

CarSar

unread,
Jan 6, 2014, 10:03:40 AM1/6/14
to publice...@googlegroups.com
Hola Angel.

No se si habrás podido solucionar el problema.
Para mi, lo mejor es trabajar con la propiedad Enabled, Visible y WindowsType de cada formulario.

Configuraciones iniciales:
Formulario Padre: Visible = .T., WindowsType = 1 (Modal)

Formulario Hijo: Visible = .F., WindowsType = 1 (Modal)

Luego en el botón del formulario Padre que usas para acceder al formulario Hijo pones lo siguiente:
Thisformset.FormularioPadre.Enabled = .F.
Thisformset.FormularioHijo.Visible = .T.
De esta manera, se te desactiva el acceso al Padre mientras está activo el Hijo.

Luego en el botón Guardar del Form Hijo pones lo siguiente.
Thisformset,FormularioHijo.Visible = ,F.
Thisformset.FormularioPadre.Enabled = .T.
Thisformset.FormularioPadre.text1.setfocus()    && Esto es para dar el foco al campo de búsqueda

Un Saludo.

El sábado, 18 de agosto de 2012 13:45:25 UTC-3, angel_pub escribió:

Fernando D. Bozzo

unread,
Jan 6, 2014, 10:07:10 AM1/6/14
to publice...@googlegroups.com
Muy buena técnica CarSar, además eso viene bien para no necesitar hacer formularios modales, ya que si los demás forms están desactivados y solo se mantiene activo el que debería ser modal, se pierde la necesidad de que lo sea.

Fidel Charny

unread,
Jan 6, 2014, 10:12:09 AM1/6/14
to publice...@googlegroups.com
Espero que haya solucionado el problema después de un año y medio.

Fernando D. Bozzo

unread,
Jan 6, 2014, 10:16:44 AM1/6/14
to publice...@googlegroups.com
XD XD XD
Reply all
Reply to author
Forward
0 new messages