No entiendo bien para qué quieres atacar el
thisform.name.
El objeto formulario tomara el JustStem("FormName.scx") como referencia de objeto si:
1) Lo instancias de un command de Menu y se trate de la única instancia de ese form
2) Lo instancias desde la ventana de comandos.
En cualquier otro caso, se creará una referencia de objeto con un nombre que no conocemos, salvo que se nombre se asigne al lanzar el form:
Por ejemplo, desde el formulario padre:
* Esto debería ir en el load o en el Init del form. También crearla con el diseñador de formularios.
Aaddproperty(thisform,"hijo1",null)
2.1 Formulario modal o modeless
IF VARTYPE(THISFORM.HIJO1)#"O"
DO FORM frmHijo NAME thisform.Hijo1
ENDIF
2.2. Solamente si el formlario no es modal
IF VARTYPE(THISFORM.HIJO1)#"O"
local lnFormCount
lnFormCount = _screen.FormCount
DO FORM frmHijo
IF _SCREEN.FORMCOUNT > lnFormCount
Thisform.Hijo1 = _Screen.Forms(1) && este parámetro debe ser 1 para saber el último form abierto.
ENDIF
ENDIF
Luego, por ejemplo, tanto para 2.1 como para 2.2
IF VARTYPE(THISFORM.Hijo1)="O"
Thisform.HIjo1.Release
ENDIF
Thisform.HIjo1 = null
No hay que descartar la posibilidad de crear una propiedad array que puede resultar más manejable que un array "trucho" como Hijo1, HIjo2, etc.
La asignación de un valor a la propiedad Name de un formulario es útil para la detección de errores y se puede utilizar para procesos propios del formulario (por ejemplo, si se guardan una serie de valores que dependen de ese name: top, left, width, height, windowstate, ciertos valores predeterminados, procesos distintos según el nombre, etc.). No tiene ninguna utilidad para referenciar al formulario instanciado.
Si se trata de distintos formularios que tienen el mismo Name (típico "Form1") lo que hay que hacer es cambiarlos con el diseñador de formularios o con foxbin2prg.
Si se trata de un mismo formulario que tiene instancia múltiple, se puede pasar como parámetro el string y asignarlo en el init del form.
Al llamar:
DO FORM frmHijo NAME thisform.Hijo1 WITH "MiPrimerHijo"
DO FORM frmHijo NAME thisform.Hijo2 WITH "MiSegundoHijo" && segunda instancia del mismo form frmHijo.
En el Init de frmHIjo
LPARAMETERS tcFormName
This.Name = EVL(tcFormName,
this.name) && si se omite el parámetro mantendrá el Name actual.