PDA

Ver la Versión Completa : Cerrar Forms


javiermorales
30-06-2003, 10:13:51
Buenos Días a todos. Mi problema es el siguiente, cuando creo un form y lo muestro como "ShowModal", el punto donde creo dicho formulario, como es lógico, espera hasta que se cierra dicho formulario y puedo realizarle un Free y una asignación a null del mismo.

El problema viene cuando no se muestra como Modal. Yo tengo un TreeView que ejerce de menú dentro del main, desde ese menú y utilizando los consejos de un hilo de este foro (fábrica de clases), voy creando las pantallas correspondientes a las opciones de menú seleccionadas. Todo funciona correctamente, salvo a la hora de cerrar los Formularios, sin hacerlo desde la cruz de la pantalla.

Si pongo un botón al formulario creado y le digo "formulario.Close", o me deja el formulario en pantalla o me produce un error de protección general. Este error solo se produce en los formularios creados directamente desde el menú TreeView de la form Main.

¿Alguien conoce la manera correcta de realizar el cerrado y liberación de esos formularios?.

Gracias. Un abrazo.

__cadetill
30-06-2003, 10:24:27
en principio poniendo u

Action := caFree;

en el OnClose del form, tendrias que tener suficiente

andres1569
30-06-2003, 10:29:30
Para asegurarte de que se destruyen dichos formularios al cerrarlos, en el evento OnClose de los mismos, escribes:

action := caFree;

De todas formas, si tienes variables apuntando a esos formularios, imagino que chequearás antes de crearlos que apunten a nil, en este caso, al cerrarse el formulario debes asegurarte de que se pongan a nil también dichas variables. Una manera de hacerlo sería que asignaras un procedimiento a cada formulario que éste llamara al destruirse. El procedimiento, cómo no, se encargaría de asignar nil a la variable correspondiente.

De todas formas, lo normal es no asignar variables globales a formularios sino consultar las propiedades Forms[Index] y FormCount del objeto Screen, y hacer un bucle que recorra todos los Forms del programa, si se encuentra un Form del tipo que se quiere crear, simplemente se llama a Show, si no se encuentra se crea y se muestra en pantalla.

javiermorales
30-06-2003, 10:29:32
Gracias, voy a probarlo y te cuento.

Un abrazo.