Saber el nombre interno de un formulario
Si lo guardas como "ejemplo.scx", lo convocas con:
DO FORM ..\forms\ejemplo
Ahora bien:
Si lo llamas desde un "Command" de menú, el formulario se llamará igual que el archivo (sin extensión), por lo que desde fuera de él, puedes referirte como
ejemplo.Text1.Value="Alguna Cosa" (desde el formulario sería Thisform.Text1.value="Alguna Cosa"
Si lo llamas desde cualquier procedimiento (de menú, de clase, método de formulario, Evento, etc)
el formulario tomará un nombre interno que no conoces, ni vale la pena conocer.
Solución: Indicar la cláusula NAME
Tenés varias formas:
Desde un procedimiento de menú, Form, Clase, ó prg.
a) La más sencilla
Release EJEMPLO
PUBLIC Ejemplo
DO FORM ..\forms\ejemplo NAME Ejemplo LINKED
Ahora, tu formulario se llamará "ejemplo" y puedes referirte a él como Ejemplo
b) Más complicado (y más seguro)
b1) Desde un Form.
thisform.ADdproperty("FrmEjemplo",.f.) && agrega una propiedad al form
DO FORM ..\forms\ejemplo NAME Thisform.FrmEjemplo LINKED
Ahora puedes usar el nombre de la propiedad para referirte a objetos, métodos y propiedades del formulario Ejemplo.
Thisform.FrmEjemplo.Text1.Value="Alguna Cosa"
b2) Desde procedimiento de menú, .prg ó Custom Class
_Screen.AddProperty("FrmEjemplo",.f.)
Y ahora te puedes referir al formulario (siguiendo el ejemplo anterior) con:
_Screen.FrmEjemplo.TExt1.Value="Alguna Cosa"
La cláusula LINKED hará que tu formulario se destruya cuando se destruya el objeto ó variable que lo contiene.
En el caso simple, RELEASE ejemplo (libera la variable pública "ejemplo" y esto produce la liberación del formulario.
En el caso del form, cuando se destruya el formulario que llama a Ejemplo, se destruirá también el formulario Ejemplo.
En el caso de _Screen, se cerrará si cierras el sistema.
En cualquier caso puedes cerrarlo manualmente o por programa.
Y para qué sirve la propiedad NAME del formulario?
Fundamentalmente para que sepas de dónde provienen los problemas. Si todos tus formularios se llaman "Form1" cuando se produzca un error puede que te cueste interpretar dónde se origina.
También puedes utilizar la propiedad NAME de un formulario para guardar su posición en un tabla de posicionamiento de formularios. También puede que quieras guardar valores de colores y lo puedes hacer con la propiedad NAME.