FoxPro/Visual FoxPro - Destruir objetos al salir de una ventana

   
Vista:

Destruir objetos al salir de una ventana

Publicado por Juan (71 intervenciones) el 12/12/2013 17:42:34
Buenas tardes, yo tengo el siguiente codigo en el INIT del formulario:

1
2
3
4
5
6
7
8
9
10
11
&& Creo las etiquetas que hagan falta
	for nI=1 to 5
		cLabel='label'+alltrim(str(nI))
		cCadena='cCadena'+alltrim(str(nI))
 
		.NewObject(cLabel, "Label")
		.&cLabel..caption="Prueba"
		.&cLabel..fontsize=11
		.&cLabel..autosize=.t.
		.&cLabel..visible=.t.
	endfor

Como pueden ver creo 5 etiquetas, pero me gustaría al cerrar la ventana destruir esos objetos que he creado, ya que la próxima vez que entro se me queda colgado y no me responde el programa.

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

Destruir objetos al salir de una ventana

Publicado por Fidel José (558 intervenciones) el 12/12/2013 19:44:21
Tienes que buscar el motivo por el que se te queda colgado. Eso seguro que no es, al menos en el ejemplo que muestras. Dicho sea de paso, supongo que existe un With Thisform / endwith que no se ve en lo que muestras.

Para quitar los objetos, existe el método RemoveObject(cNombreObjeto).
Pero fijate que todos los objetos se destruyen solos en el evento Destroy. Ya en Unload no existen.
Piensa Juan, que un formulario comienza a existir como tal cuando se instancia. Si no instancias el formulario, y lo creaste con el diseñador de formularios, solamente existe una tabla .scx (que es una dbf) y otra sct (que es una fpt de los campos memo del scx) que opera como base de datos para crear el formulario que terminas viendo. El diseñador de formularios es un wizard que te permite rellenar esa tabla de modo interactivo.

"la próxima vez que entro se me queda colgado y no me responde el programa".
Acá debes ver si el formulario se libera de alguna forma. Para eso, ejecuta el formulario en modo interactivo y lo cierras. En la ventana de comandos escribe
? _screen.formCount
Si la respuesta es 1, es porque el formulario está abierto, aún cuando no se vea. Tal vez pusiste algo inconveniente en Destroy o en Unload. El formulario puede quedar abierto y no ser accesible (queda en el limbo), lo que te obliga a cerrar el programa.
Si cuando intentas reabrir el form, y dices que el programa se cuelga, es posible que el formulario se vea o que no alcance a mostrarse. Antes de llamar al formulario, activa el Debug para tener idea del recorrido.
También te será muy util utilizar SET COVERAGE en el load del formulario.
Por ejemplo, en load del form pones:
SET COVERAGE TO RASTROS.TXT
Y en el unload del form:
SET COVARAGE TO
Luego busca el archivo Rastros.txt en la carpeta del proyecto y miras el desempeño del form.
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