pasear de un form a otro

1,763 views
Skip to first unread message

Samuel SMH

unread,
Jul 1, 2011, 12:56:45 AM7/1/11
to publice...@googlegroups.com
Hola Foro,
tengo un form principal con una barra toolbar en el cual tengo 2 botones:
 el 1er boton ejecuto el formA ; el 2do ejecutó el formB;
la primera vez todo bien, la segunda vez quiero si presiono el 1er botón se oculte el formB y aparezca el formA.. y lo mismo cuando presione el 2do boton..
algo asi como intercambiar entre estos dos formularios.
cuando utilizo el DEBUGER noto que al ejecutar el FormA este luego desaparece de memoria, osea no queda visible para poder referenciarlo y ejecutar cualquier metodo de este:  FormA.mostraraviso()
ó
FormA.calcula()
Como deberia hacerlo???

Gracias por la ayuda.

GeoSys Diseño de Software

unread,
Jul 1, 2011, 10:18:47 AM7/1/11
to publice...@googlegroups.com
La pregunta no tiene mucha descripción:

Al tener Toolbar me imagino que está contenida dentro de un formset, si dentro del formset están los dos formularios, puedes usar el método visible show, hide etc, ya que cuando inicias el formset se inician automáticamente los formularios, pero si llamas los formularios con do form debes cerrar el activo y llamar con do form el otro.

Depende de como tengas estructurados tu toolbar y formularios al igual que el formset

Saludos

Anthony Contreras Peralta

Costa Rica.
.

Walter R. Ojeda Valiente

unread,
Jul 1, 2011, 11:30:09 AM7/1/11
to publice...@googlegroups.com
No liberes al formulario con el método RELEASE(), ocúltalo con el método HIDE() y vuelve a mostrarlo con el método SHOW()

Saludos.

Walter.




Date: Thu, 30 Jun 2011 21:56:45 -0700
From: ssan_m...@hotmail.com
To: publice...@googlegroups.com
Subject: [vfp] pasear de un form a otro

Samuel SMH

unread,
Jul 1, 2011, 11:55:44 AM7/1/11
to publice...@googlegroups.com
Walter al hacer esto: FormA.show() me sale un error algo asi "no se encuentra el objeto FormA"
y cuando veo en el debugger , no se isualiza el nombre del formulario apesar q esta activo.. cosa rara!!
Saludos.

Walter R. Ojeda Valiente

unread,
Jul 1, 2011, 12:39:10 PM7/1/11
to publice...@googlegroups.com
No utilices el método RELEASE(), utiliza solamente HIDE() y SHOW()

Saludos.

Walter.




Date: Fri, 1 Jul 2011 08:55:44 -0700
From: ssan_m...@hotmail.com
To: publice...@googlegroups.com
Subject: Re: RE: [vfp] pasear de un form a otro

Samuel SMH

unread,
Jul 1, 2011, 12:51:12 PM7/1/11
to publice...@googlegroups.com
Walter, lo que hago es llamar a dos formularios con
DO FORM FormA
DO FORM FormB

cuando desde el FormB mediante un boton invoco al FormA , me sale ese error y cuando veo en el debugger no se visualiza como objeto cargado,
ambos formularios estan EN Formulario de nivel superior y con sesiones privadas.
en ningun momento estoy cerrando release() los dos estan abiertos uno detrás de otro.

que puede estar pasando??

había otra forma de llamarlo me parece crando el formulario con Createobeject y colocandolo a una variable pública, me puedes pasar otra forma de invocar los forms??
Saludos.

Walter R. Ojeda Valiente

unread,
Jul 1, 2011, 12:55:08 PM7/1/11
to publice...@googlegroups.com
DO FORM FormA NAME MiFormA

y luego puedes salir de FormA con el método HIDE() y desde FormB llamar a cualquier propiedad o método de FormA:

MiFormA.Caption = "El nuevo caption de FormA"

MiFormA.SHOW()

y viceversa.

Saludos.

Walter.




Date: Fri, 1 Jul 2011 09:51:12 -0700

From: ssan_m...@hotmail.com
To: publice...@googlegroups.com
Subject: Re: RE: [vfp] pasear de un form a otro

Samuel SMH

unread,
Jul 2, 2011, 7:28:07 PM7/2/11
to publice...@googlegroups.com
Gracias Walter me funcionó, solo q las variables tienen q ser públicas para poder pasar de un forms a otro..
Saludos.

Walter R. Ojeda Valiente

unread,
Jul 2, 2011, 8:12:20 PM7/2/11
to publice...@googlegroups.com
¿Variables públicas? deberías utilizar propiedades, no variables públicas.

Saludos.

Walter.




Date: Sat, 2 Jul 2011 16:28:07 -0700

From: ssan_m...@hotmail.com
To: publice...@googlegroups.com
Subject: Re: RE: [vfp] pasear de un form a otro

Samuel SMH

unread,
Jul 2, 2011, 9:14:41 PM7/2/11
to publice...@googlegroups.com
Walter si entiendo, yo tampoco considero trabajar con variables públicas, pero para este caso me es útil; además teniendo en cuenta que sólo dejaré trabajar abriendo 5 forms a la vez(osea 5 variables públicas).
Saludos.

miltonvas

unread,
Jul 3, 2011, 10:30:19 PM7/3/11
to Comunidad de Visual Foxpro en Español
poque no pones propiedades del _screen

_screen.addproperty("var1","xx")
_screen.addproperty("var2",1)
_screen.addproperty("var3",date())

Daniela Laura Trossero

unread,
Jul 22, 2011, 4:27:52 PM7/22/11
to publice...@googlegroups.com
Buenas tardes, estoy necesitando algo parecido a este tema.
 
Tengo un formulario A con muchos métodos y que se está usando desde hace tiempo. Este formulario A tiene muestra una imagen, y presionando la tecla F11 se puede agreandar dicha imagen, con otro tecla se puede rotar.
Ahora necesito llamar a un formulario B, que se abra a un costado del formulario A, y estando los 2 formularios abiertos, al picar en F11 se siga agrandando la imagen o rotando. Esto lo logro poniendole al formulario B el windowsType en 0: modeless
Entonces estando los 2 formularios a la vista, al picar en el formulario A y presionando F11 se agranda la imagen.
 
Hasta aca bien, pero lo que tengo que hacer ahora es que al cerrar el formulario B, se ejecute el código que tiene un botón del formulario A. Sin llamarlo con el Do form A, porque ya está abierto y no me sirve, y sin usar un form set, tengo alguna manera de lograrlo???
 
No se si soy clara, pero puedo seguir ampliando. Si alguien puede ayudarme les agradecería mucho
 
Saludos
 
Daniela

 

From: wr...@hotmail.com
To: publice...@googlegroups.com
Subject: RE: [vfp] pasear de un form a otro
Date: Fri, 1 Jul 2011 16:55:08 +0000

Yvan GMAIL

unread,
Jul 22, 2011, 4:36:47 PM7/22/11
to publice...@googlegroups.com

No lo he probado.. pero podria funcionar.

 

For I = 1 To _Screen.FormCount

      IF Screen.Forms(I).NAME = “MIFORMABIERTO” THEN

_Screen.Forms(I).Metodo

ENDIF

ENDIF

 

 

Saludos.

Yvan Carranza

GeoSys Diseño de Software

unread,
Jul 22, 2011, 4:51:23 PM7/22/11
to publice...@googlegroups.com
Hola Daniela,

Vamos a ver si te entendí,

En forma predeterminada siempre primero abres el formulario A.
Luego en el formulario A tienes un botón o algo por el estilo que llama al formulario B.
Ok.
Lo que tienes que hacer cuando el formulario B se cierra es que el formulario A haga determinadas acciones, es así?
Ejemplo:
do form formularioA

En un botón o init de formularioA 
do form formulario B te quedas posecionada en formulario B y haces todo lo que sea en el formulario B
.
Cuando el formulario B se cierra el código que sigue después de do form formulario B tomará las acciones, pero hasta que se cierre formularioB, esto porque después del DO FORM el código se queda esperando hasta que cierren el otro formularioB.

Este ejemplo desde el formularioA se llama al formularioB y cuando se cierra B, enfocará la grid1, irá al inicio de la tabla o cursor y hará un browse todo eso del formularioA.

DO FORM formularioB && El usuario estará trabajando en el formularioB y cuando lo cierra,
THISFORM.GRID1.SETFOCUS && Enfoca la grid del formulario A
GOTO TOP
BROWSE



Saludos

Anthony Contreras Peralta

Costa Rica.



Daniela Laura Trossero

unread,
Jul 22, 2011, 4:51:39 PM7/22/11
to publice...@googlegroups.com
Funcionó a la perfección!!!!!
Muchísimas gracias!!!
Saludos y buen fin de semana!


Daniela

 

To: publice...@googlegroups.com
Subject: RE: [vfp] pasear de un form a otro
Date: Fri, 22 Jul 2011 15:36:47 -0500

Wladimir Carrillo

unread,
Jul 22, 2011, 4:54:25 PM7/22/11
to publice...@googlegroups.com

La forma más fácil es crear una variable pública en tu primer form y a esa variable asignarle el form actual…. Por ejemplo en el INIT del form pones:

 

Public formularioA

formularioA = this

 

Luego desde el formulario B puedes acceder a cualquier método o control del formulario A, tan solo poniendo:  formularioA.nombreControl.value  o  formularioA.algunMetodo()

 

La otra opción es utilizar _screen.forms(idForm)… y el tratamiento es el mismo

 

Saludos,

Wladimir

Samuel SMH

unread,
Jul 22, 2011, 9:44:05 PM7/22/11
to publice...@googlegroups.com
Efectivamente Daniela lo puedes hacer con variables públicas asi:
PUBLIC lvForm
DO FORM  formularioA NAME lvForm

luego para llamar a cualquier metodo o propiedad: 
lvForm.mipropiedad = 'VFP9.0'
lvForm.hacer_magia()

Saludos.

Intel Man

unread,
Jul 23, 2011, 7:53:21 AM7/23/11
to publice...@googlegroups.com
Hola, supongamos que tus formularios se llaman:

formularioa y formulariob

Cuando ejecute el metodo de cerrar el formulariob entonces colocas asi:

boton_cerrar_formulariob

formularioa.metodo_formularioa
thisform.release

Y en el metodo_formularioa deberia haber un thisform.release tambien para que lo cierre el formularioa.

Eso es todo.

Saludos


To: publice...@googlegroups.com
Subject: RE: [vfp] pasear de un form a otro
Date: Fri, 22 Jul 2011 20:27:52 +0000

Vero

unread,
Oct 31, 2012, 11:57:36 AM10/31/12
to publice...@googlegroups.com
Hola a todos,
 
Tengo un problema similar:
 
Llamo desde un menú a varios form A, B, C. Todos utilizan sesiones de datos privadas. El problema es el siguiente, las variables privadas de cada formulario si tienen el mismo nombre, al pasar de un form a otro actualizan su valor y necesito que permanezcan independientes.
Hay alguna manera de lograrlo?
 
Gracias!

Fox Learner

unread,
Oct 31, 2012, 12:04:01 PM10/31/12
to publice...@googlegroups.com, ssan_m...@hotmail.com
Las variables privadas actualizan su valor al pasar de un form a otro porque tienen el mismo nombre...

Creo que es lo correcto. Así debería de ser.. Las variables si son privadas deben tener el valor que tienen en el form activo.

Creo que aun no capto cual es el problema. Será que deseas conservar el valor de las variables en cada form ? ..

Saludos!

Moises Daniel Vilchez Tello

unread,
Oct 31, 2012, 12:08:30 PM10/31/12
to publice...@googlegroups.com
creo que en lugar de utilizar variables para comunicación de un form a otro, debes revisar la documentación de lparameters y parameter y seria mejor utilizar propiedades del mismo form antes que variables, saludos




--
 
 
 



--
Moises Daniel Vilchez Tello
Chiclayo - Lambayeque - Peru

FidelJ

unread,
Oct 31, 2012, 4:40:18 PM10/31/12
to publice...@googlegroups.com
La mayor independencia la puedes conseguir si, en lugar de utilizar variables PRIVATE defines propiedades del formulario, para tiempo de ejecución con thisform.addproperty("NombrePropiedad",cnlValor) ó mediante el menú desde el diseñador de formularios y convocándolas como Thisform.NombrePropiedad. Si conoces el nombre de cada form. puedes convocar una propiedad (ó método) desde otro formulario.

Luis Maria Guayan

unread,
Oct 31, 2012, 6:43:50 PM10/31/12
to publice...@googlegroups.com
Yo te aconsejaria que no utilices variables privadas ni publicas, sino
utiliza propiedades en tus formularios.

On 10/31/12, Vero <vero.a...@gmail.com> wrote:
> Hola a todos,
>
> Tengo un problema similar:
>
> Llamo desde un menú a varios form A, B, C. Todos utilizan sesiones de datos
>
> privadas. El problema es el siguiente, las variables privadas de cada
> formulario si tienen el mismo nombre, al pasar de un form a otro actualizan
>
> su valor y necesito que permanezcan independientes.
> Hay alguna manera de lograrlo?
>
> Gracias!
>
>
>
> El sábado, 23 de julio de 2011 08:53:21 UTC-3, Intel escribió:
>
>> Hola, supongamos que tus formularios se llaman:
>>
>> formularioa y formulariob
>>
>> Cuando ejecute el metodo de cerrar el formulariob entonces colocas asi:
>>
>> boton_cerrar_formulariob
>>
>> formularioa.metodo_formularioa
>> thisform.release
>>
>> Y en el metodo_formularioa deberia haber un thisform.release tambien para
>>
>> que lo cierre el formularioa.
>>
>> Eso es todo.
>>
>> Saludos
>>
>> ------------------------------
>> From: dtro...@hotmail.com <javascript:>
>> To: publice...@googlegroups.com <javascript:>
>> Subject: RE: [vfp] pasear de un form a otro
>> Date: Fri, 22 Jul 2011 20:27:52 +0000
>>
>> Buenas tardes, estoy necesitando algo parecido a este tema.
>>
>> Tengo un formulario A con muchos métodos y que se está usando desde hace
>> tiempo. Este formulario A tiene muestra una imagen, y presionando la tecla
>>
>> F11 se puede agreandar dicha imagen, con otro tecla se puede rotar.
>> Ahora necesito llamar a un formulario B, que se abra a un costado del
>> formulario A, y estando los 2 formularios abiertos, al picar en F11 se
>> siga
>> agrandando la imagen o rotando. Esto lo logro poniendole al formulario B
>> el
>> windowsType en 0: modeless
>> Entonces estando los 2 formularios a la vista, al picar en el formulario A
>>
>> y presionando F11 se agranda la imagen.
>>
>> Hasta aca bien, pero lo que tengo que hacer ahora es que al cerrar el
>> formulario B, se ejecute el código que tiene un botón del formulario A.
>> Sin
>> llamarlo con el Do form A, porque ya está abierto y no me sirve, y sin
>> usar
>> un form set, tengo alguna manera de lograrlo???
>>
>> No se si soy clara, pero puedo seguir ampliando. Si alguien puede ayudarme
>>
>> les agradecería mucho
>>
>> Saludos
>>
>> *Daniela*
>>
>>
>> ------------------------------
>> From: wr...@hotmail.com <javascript:>
>> To: publice...@googlegroups.com <javascript:>
>> Subject: RE: [vfp] pasear de un form a otro
>> Date: Fri, 1 Jul 2011 16:55:08 +0000
>>
>> DO FORM FormA NAME MiFormA
>>
>> y luego puedes salir de FormA con el método HIDE() y desde FormB llamar a
>>
>> cualquier propiedad o método de FormA:
>>
>> MiFormA.Caption = "El nuevo caption de FormA"
>>
>> MiFormA.SHOW()
>>
>> y viceversa.
>>
>> Saludos.
>>
>> Walter.
>>
>>
>>
>> ------------------------------
>> Date: Fri, 1 Jul 2011 09:51:12 -0700
>> From: ssan_m...@hotmail.com <javascript:>
>> To: publice...@googlegroups.com <javascript:>
>> Subject: Re: RE: [vfp] pasear de un form a otro
>>
>> Walter, lo que hago es llamar a dos formularios con
>> DO FORM FormA
>> DO FORM FormB
>>
>> cuando desde el FormB mediante un boton invoco al FormA , me sale ese
>> error y cuando veo en el debugger no se visualiza como objeto cargado,
>> ambos formularios estan EN Formulario de nivel superior y con sesiones
>> privadas.
>> en ningun momento estoy cerrando release() los dos estan abiertos uno
>> detrás de otro.
>>
>> que puede estar pasando??
>>
>> había otra forma de llamarlo me parece crando el formulario con
>> Createobeject y colocandolo a una variable pública, me puedes pasar otra
>> forma de invocar los forms??
>> Saludos.
>>
>
> --
>
>
>
>


--

*Luis María Guayán
Tucumán, Argentina
_________________________
**http://www.PortalFox.com <http://www.portalfox.com/>*
*Nada corre como un zorro
_________________________*

Walter R. Ojeda Valiente

unread,
Oct 31, 2012, 7:05:43 PM10/31/12
to publice...@googlegroups.com
No uses variables privadas dentro de tus formularios, usa propiedades.

Saludos.

Walter.

"Si puedes razonar con gente religiosa, no son gente religiosa". Dr. House




Date: Wed, 31 Oct 2012 08:57:36 -0700
From: vero.a...@gmail.com
To: publice...@googlegroups.com
Subject: Re: [vfp] pasear de un form a otro
--
 
 
 

Jose Mario

unread,
Nov 1, 2012, 10:29:09 AM11/1/12
to publice...@googlegroups.com

ovariable=createobject("custom")

ovariable.addproperty("Retorno1",0)

ovariable.addproperty("Retorno2","")

 asi sucesivamente de acuerdo a los datos que necesites obtener del form2

 do form miform2 with ovariable

*/para que funcione sin problema debo suponer que el miform2 es modal

cuando regresa ya tienes actualizado los datos de la variable ovariable y

tomas los datos que deseas para visualizarlos o procesar o lo que desees

hacer con ellos.

si tuviera que mostrarlos en un textbox

 

thisform.text1.value=ovariable.retorno1

thisform.text2.value=ovariable.retorno2

...

asi sucesivamente

 en tu form2 en el ini

lparameters oVariable as object

thisform.ovariable=ovariable

  

debes crear una propiedad ovariable inicializada en .NULL. y lo asignas

cuando entras el valor del parametro a la propiedad del formulario (puedes

emplear en nombre de la variable o propiedad cualquier nombre que deseas)

porque la variable del parametro del ini solo existe en ese metodo sales del

metodo adios variable asi que de esa forma queda existiendo, ademas como es

un objeto el tipo de paso es por referencia y no por valor (en el caso por

referencia no pasa el valor de la variable si no la referencia de la

direccion de memoria donde se ubica esa variable, eso quiere decir que

cualquier dato que actualices en la variable objeto se reflejara en el

origen).

 

 

En tu boton salir del form2 pones los datos que deseas que retorno en tu

objeto

 

thisform.ovariable.retorno1=thisform.text1.value

thisform.ovariable.retorno2=thisform.text2.value

 

y solucionado tu problema de retornar mas de un dato desde otro form 



en click de un command coloco esto
ovariable=createobject("custom") 
ovariable.addproperty("Retorno1",0) 
ovariable.addproperty("Retorno2","") 
DO FORM edicionc WITH ovariable
thisform.txtcprove.value=ovariable.retorno1 
thisform.txtnprove.value=ovariable.retorno2
thisform.txtcprove.setfocus 

en el init del otro formulario colocas
lparameters oVariable as object 
thisform.ovariable=ovariable 

y en este mismo colocas, destroy
thisform.ovariable.retorno1=thisform.txtcodigo.value 
thisform.ovariable.retorno2=thisform.txtnombre.value 


de leer estos mensajes, aqui esta, hay que buscarlo
aqui lo colocaon, yo solo lo aprendo y lo pongo en practica
Reply all
Reply to author
Forward
0 new messages