[vfp] usando el DO FORM quiero cambiar el nombre del form

631 views
Skip to first unread message

Leon Campos

unread,
Jan 20, 2016, 12:10:43 PM1/20/16
to Comunidad de Visual Foxpro en Español
Saludos. me gustaría saber si existe una manera de cambiar el nombre del formulario a un formulario cuando lo llamas por medio de un do form
se perfectamente que se puede hacer eso desde el load o int del formulario pero en este caso, es diferente
tengo mi form principal, el cual llama mas de un formulario (según la sección del personal)
cada form. tiene el mismo nombre entonces para evitar abrir cada form y editar el load o el init quiero que desde el form padre el que controla a los hijos les renombre el form "thisform.name" con algún código id usando el algo asi  do form formulariox "form123"

para poder usar el wexist.
ya que con el fopen como lo dice abre el archivo y me regresa true o false si ya esta abierto, pero me he fijado que si no lo esta este comnado me lo abre aunque yo no quiera, ya que solo necesito verificar que este abierto. no que lo abra. 

Luis Maria Guayan

unread,
Jan 20, 2016, 12:15:20 PM1/20/16
to publice...@googlegroups.com
Mira el ejemplo de este artículo te puede ayudar:

-- Obtener una referencia a un formulario padre --
http://comunidadvfp.blogspot.com/2014/09/obtener-una-referencia-un-formulario.html

Luis María Guayán
Tucumán, Argentina
_______________________________
Comunidad Visual FoxPro en Español
http://comunidadvfp.blogspot.com

El 20/01/16 a las 14:10, Leon Campos escribió:

Fidel Charny

unread,
Jan 20, 2016, 4:04:30 PM1/20/16
to Comunidad de Visual Foxpro en Español
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.
Reply all
Reply to author
Forward
0 new messages