![]() |
como cerrar una Form?
hola a todos¡¡¡
tengo uan duda, ahi le va.... tengo un ficha madre "Ficha1" que llama en el evento onShow a la ficha "Ficha2", la ficha2 esta en modo ShowModal, por lo tanto solo se visualiza la ficha2, para pasar el control a la ficha1 o su visualizacion , la ficha 2 debe cerrarse en modo mrOK...no se si me entienden...este el el codigo que tengo: ficha1 no es la principal de proyecto osea es llamada antes por otra from.... ya chau...y gracias... |
En la forma 2 pones dos TBitBtn, uno con su propiedad ModalResult a mrOk y el otro boton con MrCancel.
Por cierto, estas creando el 2 y cerrando el 1, por eso da el access violation. no tienes que cerrarlo. los BitBtn se encargan de ello. Saludos |
No se si será porque al crear el Form2 no se libera éste de memoria.
Prueba a hacer un Form2.Free antes de cerrar el 1. De todas formas, si es porque no se puede cerrar el Form1 porque aun no esta visualizado, puedes incluir un TTimer en el formulario Form1 que se active despues de 1 segundo y que éste te lo cierre.
Y en el Timer1 le pones 100 milisegundos o asi y le pones en el OnActivate el Form1.Close |
No creo que el Formshow sea el evento apropiado.
crea un método en Ficha1
Ahora solo tienes que crear la ficha1, llamar al método Consultar (que ya le pondrás un nombre más apropiado) y tienes todo resuelto. Tambien podría ser una función, así la ventana que llama a Ficha1.Consultar pueda saber si Ficha1 está abierta o cerrada. Al menos delphi, desde el mismo evento Onshow no te deja ocultar la propia ventana con Ficha1.Hide. No he probado a destruirla. saludos. |
Para empezar el concepto que quieres realizar esta bajo mi entender ligeramente equivocado.
¿Que sentido tiene que al visualizar "Ficha1" llames a "Ficha2" y al cerrar "Ficha2" destruyas "Ficha1"?.:eek: Mi pregunta es ¿Qué es lo que quieres hacer exactamente?:confused: un saludo;) |
hola pepelolo...
la idea es la siguiente...al visializar la ficha2 selecciono un proveedor "por decirlo de alguna forma" listado en un StringGrid. si selecciono alguno se muestra la ficha1 con los datos seleccionados y si no selecciono nada y cierro la ficha2 no me debe mostrar la ficha1 ... chau... |
Entonces sería más sencillo y claro si en lugar de abrir Ficha1 abres directamente Ficha2, y sólo si se selecciona un proveedor abres la Ficha1:
// Saludos |
cierto que si roman... pero la idea inicial es cerrar la ficha...segun lo que aportas seria selecccionar el proveedor y mostrar la otra ficha, lo que me gustaria es cerrar la ficha donde se hace el llamado....se puede hacer eso?
|
Cita:
Pero bueno, no soy yo quien para dictar tus gustos. Lo apunto sólo para opinar que a fin de cuentas esto puede ser confuso para el usuario. ¿Se puede hacer lo que quieres? Sí, claro que se puede. El problema es sólo, como ya has visto, que no puedes cerrar- ni, por tanto destruir -una ventana desde su propio evento OnShow. La solución entonces está en ejecutar el código que ahora tienes en este evento posteriormente. Aquí la idea:
PostMessage envía un mensaje a la ventana (Ficha1) que se procesará sólo hasta que terminen de procesarse los otros mensajes, lo cual se traduce en que tal mensaje no se recibirá sino hasta que el evento OnShow haya terminado por completo. Tal mensaje lo recibes con el manejador CMAfterShow desde donde sí puedes autocerrar el formulario. // Saludos |
hola roman....
gracias funciono a la primera....gracias por entender que los gustos de algunos son un poco extraño para la mayoria... |
Wow, cuanto tiempo ha pasado desde que crearon el post, yo tenia la misma duda el día de hoy.
La solución mas sencilla a mi gusto es utilizar:
Saludos. |
La franja horaria es GMT +2. Ahora son las 03:51:53. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi