Cerrar un formulario cuando tiene un menú
Es que no tienes que volver a llamar al formulario del menu. Supuestamente es el formulario principal de la aplicación y solamente debe ser llamado por el main.prg.
Los otros formularios que usas, para poder visualizarse dentro del menú, deben ser ShowWindow = 1 (In Top Level Form).
Si los dejas en ShowWindow = 0, no podrás verlos mientras el _screen esté oculto.
Para mayor precisión, todos los formularios que no son ShowWindow = 2, deben ser ShowWindow=1. Si no los llamas desde un form ShowWindow=2, asumirán automáticamente el valor cero para esa propiedad.
1) Como el form principal ShowWindow = 2 se llama desde un prg, te conviene crear una variable pública (que puede ser una propiedad de screen) y asignarle un nombre con la clásula Name.
PUBLIC goFrmPpal
DO FORM MyFrmPPal NAME goFrmPpal
De esta forma, si necesitas referite a ese formulario desde otro punto de la aplicación, la referencia será goFrmPpal
Por ejemplo:
lnBackColor = goFrmPpal.BackColor
2) Tratándose de un form principal, en el evento Unload deberías tener un QUIT, para que la aplicación termine cuando liberas el formulario. Con esto ves que el formulario principal debe estar siempre.
Normalmente creas un PROCEDURE dentro del main.prg que haga las operaciones que necesitas para un cierre prolijo.
Suponte que tienes un PROCEDURE Cerrar_app
* En el main.prg
ON SHUTDOWN DO Cerrar_app
PUBLIC goFrmPpal
DO FORM MyFrmPPal NAME goFrmPpal
READ EVENTS
PROCEDURE cerrar_app
CLEAR EVENTS
CLOSE DATABASES ALL && si aplica
* etc
QUIT
ENDPROC