FoxPro/Visual FoxPro - Saber el nombre interno de un formulario

   
Vista:

Saber el nombre interno de un formulario

Publicado por Juan (230 intervenciones) el 19/11/2012 12:38:15
Buenos días, desde Visual FoxPro 9, yo creo un formulario y lo guardo como "ejemplo.scx", como puedo saber yo desde ese mismo formulario como se llama el archivo donde está guardado.

Por ejemplo yo si hago esto: "thisform.name" me dice que el nombre es "Form1", donde está guardado el nombre que yo le puse.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Saber el nombre interno de un formulario

Publicado por Fidel (321 intervenciones) el 19/11/2012 21:50:09
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.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar