¿como puedo ocultar un formulario hasta que se cierre otro?
1) Es importante sabe que ShowWindow tiene cada formulario.
Para lograr lo que pides, si el formulario del que se parte es ShowWindow=2, el secundario tiene que ser ShowWindow=2, porque de lo contrario, se ocultará junto con el primero.
2) Si el planteo correcto es:
2.1) tengo un form tipo ShowWindow=2, que funciona como base de la aplicación con un menú.
2.2) Tengo otro formulario showWindow=1 en el que se efectúan algunas tareas (se llama desde el menú del ppal)
2.3) Tengo un tercer formulario, ShowWindow=1 en el que se ejecutan algunas tareas (se llama desde el 2.2)
El formulario de 2.1 estará siempre visible (si no pierdo el acceso a la interface).
Para que se oculte el form 2.2) , en la llamada conviene pasar la referencia de objeto:
DO FORM Secundario.scx WITH THISFORM && nota que Thisform va sin puntos y sin comillas.
*<Init del Form 2.3>
LPARAMETERS xoForm
Addproperty(thisform ,"oform" , xoForm) && creamos una propiedad y le asignamos la referencia de objeto
xoForm.Hide() && esto oculta el formulario que lo llamó
*<Destroy del Form 2.3>
THISFORM.OFORM.SHOW() && Thisform.oform es la referencia de objeto al form (2.2).
Nota: Puedes trabajar con los nombres de los formularios si utilizas la cláusula NAME al llamarlos y creas una referencia pública. Por ejemplo;
Addproperty(_screen,"FrmPase",null)
do form FormPase.scx NAME _screen.FrmPase
Luego, en cualquier punto del sistema, puedes referirte a formPase como:
_Screen.frmPase.show() && o cualquier otra propiedad u objeto.
Recuerda que cuando llamas a un formulario desde cualquier procedure o event, no conocerás el nombre del mismo. El nombre contenido en la propiedad Name del formulario se utiliza solamente para los sistemas de errores y muchas veces son incompletos. El nombre del archivo scx es utilizado como nombre por defecto solamente cuando se ejecuta desde un Command de Menu. Pero si lo lanzas desde un procedure de Menu ya no funciona. Visual Fox crea su propio nombre interno.