como trabajar entre un form y un formset

1,144 views
Skip to first unread message

euronv

unread,
Apr 20, 2014, 8:47:16 PM4/20/14
to mundovis...@googlegroups.com
Amigos del foro les planteo a continuación mi requerimiento:

Tengo un formulario que utilizare como menú principal (FRTMENU), el mismo esta compuesto por una serie de command button que invocan a un FORMSET respectivo, quiero que al pulsar el botón el formulario FRTMENU este no sea visible, se active el FORMSET en cuestión y al liberar este FORMSET para retornar al FRTMENU este sea visible de nuevo.

El problema esta en que no se como desde el FORMSET hacer referencia al FRTMENU para que este se visible

Saludos y gracias de antemano por el soporte que bien puedan brindarme 

Analyzer

unread,
Apr 20, 2014, 10:59:15 PM4/20/14
to mundovisualfoxpro
¿Cómo activas el formset desde el form que la hace de menu?

Ya probaste con hide, show?.. (Sin borrar el form de la memoria con release)


Saludos!


--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:
mundovisualfox...@googlegroups.com
---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfox...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Fidel Charny

unread,
Apr 21, 2014, 8:04:24 AM4/21/14
to mundovis...@googlegroups.com
La referencia a un form ShowWindow=2 que hace de formulario principal (y es el primero que se carga), será siempre:
if _Screen.FormCount>0
      objMainFrm = _screen.Forms(_screen.FormCount)
endif
Esto porque VFP desplaza el array _Screen.Forms(), resultando que el último form abierto ocupa la posición 1 y desplaza hacia el fondo a todos los demás. Por lo que el primero abierto es el último elemento del array.

Para lo que pretendes hacer, es fundamental que los formularios que se abran sean ShowWindow=2
El comando para regresar al MainFrm:
*<cmdCerrar.Click>
LOCAL obj
obj=_screen.forms(_screen.FormCount)
obj.Show
thisformset.Release
*</cmdCerrar.Click>

Euro J. Nava L.

unread,
Apr 21, 2014, 10:37:05 AM4/21/14
to mundovis...@googlegroups.com

Con un DO FORM y nunca he utilizado el hide show

 

 

 

Saludos

 

 

 

El presente correo y sus anexos son exclusivamente para el uso de los destinatarios indicados en el encabezado del mismo, pueden contener información confidencial y/o privilegiada. Si usted por error ha recibido la presente correspondencia agradezco hacer omisión de esta y hacerme del conocimiento por esta misma vía.

 

Bendito el hombre que ha sido llamado por Cristo para ser soldado de su ejército en cuya mano empuñe como arma la palabra de Dios

Analyzer

unread,
Apr 21, 2014, 11:07:59 AM4/21/14
to mundovisualfoxpro
Oye Euro,

Y necesariamente debes armarlo así?

Form con botones para menú ==> Form set clickeado en menu ==> Forms

Y por qué no así?

Form con botones para menú ==> Forms

Comenta si te sería muy dificil hacerlo de la segunda forma..

Esto porque la recomendación general en los grupos es no usar formsets.


Saludos!

Euro J. Nava L.

unread,
Apr 21, 2014, 11:15:48 AM4/21/14
to mundovis...@googlegroups.com

Todos los formulario fueron creado en base a FORMSET

Analyzer

unread,
Apr 21, 2014, 11:19:39 AM4/21/14
to mundovisualfoxpro
Pues no uso los formsets, pero igual para aprender voy a hacer una prueba para ver si me sale lo que quieres.

Según entiendo debo reproducir tu escenario haciendo esto:

1. Crear un form con botones de comando.
2. En el click de uno de esos botones lanzar un formset (con do form dices que lo haces..)
3. Al mostrarse el formset, poner invisible el form con botones.
4. Al cerrar el formset, volver a hacer visible el form con botones.

Lo reproduzco y te digo como me fue a ver si lo logro..



Saludos!

Euro J. Nava L.

unread,
Apr 21, 2014, 11:23:47 AM4/21/14
to mundovis...@googlegroups.com

Exacto Analyzer y gracias por tu interés en mi caso

Euro J. Nava L.

unread,
Apr 21, 2014, 12:02:34 PM4/21/14
to mundovis...@googlegroups.com

Fidel ¿y este código estaría ubicado en el command button que invoca al formset? y objMainFrm que mencionas seria FRTMENU

 

if _Screen.FormCount>0

      objMainFrm = _screen.Forms(_screen.FormCount)
endif

 

 

 

Saludos

 

 

 

El presente correo y sus anexos son exclusivamente para el uso de los destinatarios indicados en el encabezado del mismo, pueden contener información confidencial y/o privilegiada. Si usted por error ha recibido la presente correspondencia agradezco hacer omisión de esta y hacerme del conocimiento por esta misma vía.

 

Bendito el hombre que ha sido llamado por Cristo para ser soldado de su ejército en cuya mano empuñe como arma la palabra de Dios

 

--

Analyzer

unread,
Apr 21, 2014, 12:03:34 PM4/21/14
to mundovisualfoxpro
Euro,

No sé si lo hice bien, pero me funcionó así:

1. Cree un form normal.
2. Cree otro form normal y le di en form/create form set.
3. Luego agregué forms a ese set con Form/Add New Form

Luego puse un boton de comando en el form normal que dice "Lanzar Form set"

Y en el click de ese boton puse esto:

DO FORM "formset uno.scx"
thisform.Hide()

Luego en el mismo form puse esto en el load:

Thisform.Show()  

Para que cuando se cargue el form se muestre.. Aunque funciona sin eso también, porque por las dudas lo probé..

Luego en uno de los forms del formset puse un boton y en el click:

DO FORM "formmenu.scx"
Thisformset.Hide()

Con todo esto, al arrancar se lanza el form normal. Al hacer click aparece el formset y desaparece el form normal.

Al hacer click en el boton de uno de los forms del formset, regresa al form normal y se pone invisible el formset.




Saludos!

Euro J. Nava L.

unread,
Apr 21, 2014, 12:22:29 PM4/21/14
to mundovis...@googlegroups.com

Euro,

 

No sé si lo hice bien, pero me funcionó así:

 

1. Cree un form normal.[Euro J. Nava L.]  ¿este seria el que figura como menú?

2. Cree otro form normal y le di en form/create form set.

3. Luego agregué forms a ese set con Form/Add New Form

 

Luego puse un boton de comando en el form normal que dice "Lanzar Form set"

 

Y en el click de ese boton puse esto:

 

DO FORM "formset uno.scx"[Euro J. Nava L.]     este muestra el formset

thisform.Hide()[Euro J. Nava L.]  este oculta el form menu

 

Luego en el mismo form puse esto en el load:[Euro J. Nava L.]  ¿del form menú?

 

Thisform.Show()  

 

Para que cuando se cargue el form se muestre.. Aunque funciona sin eso también, porque por las dudas lo probé..

 

Luego en uno de los forms del formset puse un boton y en el click:

 

DO FORM "formmenu.scx"[Euro J. Nava L.]  ¿esto es para que se muestre nuevamente el form menú?

Thisformset.Hide()[Euro J. Nava L.]  y este oculta el formset que fue invocado por el form menu

Analyzer

unread,
Apr 21, 2014, 12:25:27 PM4/21/14
to mundovisualfoxpro

No sé si lo hice bien, pero me funcionó así:

 

>1. Cree un form normal.[Euro J. Nava L.]  ¿este seria el que figura como menú?


Si.


2. Cree otro form normal y le di en form/create form set.

3. Luego agregué forms a ese set con Form/Add New Form

 

Luego puse un boton de comando en el form normal que dice "Lanzar Form set"

 

Y en el click de ese boton puse esto:

 

DO FORM "formset uno.scx"[Euro J. Nava L.]     este muestra el formset


Si.


thisform.Hide()[Euro J. Nava L.]  este oculta el form menu


Si.

 

Luego en el mismo form puse esto en el load:[Euro J. Nava L.]  ¿del form menú?


Si.

 

Thisform.Show()  

 

Para que cuando se cargue el form se muestre.. Aunque funciona sin eso también, porque por las dudas lo probé..

 

Luego en uno de los forms del formset puse un boton y en el click:

 

DO FORM "formmenu.scx"[Euro J. Nava L.]  ¿esto es para que se muestre nuevamente el form menú?


Si.


Thisformset.Hide()[Euro J. Nava L.]  y este oculta el formset que fue invocado por el form menu


Si.

 

Con todo esto, al arrancar se lanza el form normal. Al hacer click aparece el formset y desaparece el form normal.

 

Al hacer click en el boton de uno de los forms del formset, regresa al form normal y se pone invisible el formset.

 

 



Saludos!

Euro J. Nava L.

unread,
Apr 21, 2014, 12:27:28 PM4/21/14
to mundovis...@googlegroups.com

Muchas gracias Analyzer probare y te cuento

Euro J. Nava L.

unread,
Apr 21, 2014, 12:54:09 PM4/21/14
to mundovis...@googlegroups.com

Analyzer….. ¡Funciono a la perfección! Mil gracias amigo te debo una

 

 

 

Saludos y nuevamente gracias por tu interes en ayudarme

Analyzer

unread,
Apr 21, 2014, 1:57:39 PM4/21/14
to mundovisualfoxpro
Por nada.. Como te comenté, no uso los forms sets con VFP, pero me alegra que lo hayas solucionado.

Ahora bien, lo que entiendo que sucede en VFP es que al hacer un DO Form se crea una "instancia" del formulario que estara en memoria hasta que lo quitas de ella con release.

Mientras este en memoria(no este liberado o destruido) puedes sin embargo ocultar o mostrar esa instancia con hide() y show().

Saludos!

Fidel Charny

unread,
Apr 21, 2014, 4:44:24 PM4/21/14
to mundovis...@googlegroups.com
Euro:
No tienes que volver a llamar al formulario principal con Do form, porque con ello creas una nueva instancia de ese formulario. 
Puedes probar eso colocando un botón provisorio en el Main form, con este código: 
MESSAGEBOX("_Screen.Formcount="+TRANSFORM(_screen.FormCount))


Esto es sencillo:
1) Todos los formularios deben ser ShowWindow=2, si es que _Screen.Visible=.F.
2) En cada botón de llamada a los formset, va el código:
DO FORM MiFormSet1
thisform.Hide()

3) En los formularios del formset seguramente tendrás un botón de salida:
_screen.forms(_screen.FormCount).show
thisformset.Release

Con eso sabes que tu formulario principal se carga una sola vez. Si no, tendrás tantas instancias de ese form corriendo como veces hayas salido de un formset + 1 (la inicial).

Reply all
Reply to author
Forward
0 new messages