![]() |
Cerrar un Form MDI al abrir otro MDI
hola
Tengo una aplicación , en la que voy a convertir los forms en mdi child para que se vean dentro del MDI Form principal . El caso es que quiero que cuando uno le de al botón para abrir un form mdi , se cierre el que ya esta . Entonces , no sé que código poner y donde ponerlo , he pensado que quizás un TApplicationEvents puede ser útil en su propiedad , onidle , pero no sé si es mejor poner algún tipo de procedimiento , en el botón de apertura de todos los forms , y que código tendria que poner . Por que estos forms mdi , llaman a otros forms ShowModal , para buscar clientes , articulos , etc... obviamente , sólo tienen que cerrarse los MDI Child . |
Esto que te voy a poner no lo he probado, pero debería funcionar...
Saludos... |
Veo que podria funcionar , pero me pregunto que si tengo muchos botones , tendria que poner este código en todos ellos , no habría alguna forma de ponerlo sólo una vez .
|
Si todas tus formas MDIChild son iguales (por ejemplo, archivos de texto para editar), puedes usar el mismo evento para todos los botones.
Si tus formas MDIChild varian entre si (varias formas del tipo fsMDIChild), necesitas una forma de saber cual es exactamente la forma que vas a crear y mostrar. Esto lo puedes lograr con un arreglo conteniendo las clases de las formas:
Luego a cada botón en su propiedad Tag le pones un número, el cual va a representar el índice de la forma en el arreglo de clases. Luego creas un evento OnClick y se lo asignas a todos los botones y en el código pones algo como:
Ya con esto deberías obtener la forma correcta de acuerdo al botón que oprimas. Claro que existen varias formas de lograr esto, pero es la que se me ocurrió de momento. Saludos... |
Cuando hago esto , el caso es que si tengo abierto un formulario , por ejemplo TFrmVentas , y le doy otra vez al botón de abrir Ventas , este formulario que ya esta se cierra y se vuelve a cargar , cuando si el formulario que esta activo , el MDIActiveChild , se le da al botón otra vez , quiero que lo único que haga es mirar sino esta maximizado y si esta que no haga nada y sino esta , pues que lo maximize , pero que no lo cierre y vuelva a crear .
He creado el siguiente procedure :
Abrí que poner algo para evitar que se cierre el formulario que esta activo , al darle otra vez al bóton , para ello no sé que código poner , eso si , habría que pasarle un parametro al procedure , algo asi como procedure (F:TForm); A ver si alguien puede ayudarme . |
Prueba con esta variación al evento AllButtonClick anterior:
Aquí lo que se hace es que si la clase de la forma que está abierta es la misma de la que quieres abrir, solamente restaura la forma si esta se encuentra minimizada. Si es diferente, entonces realiza el código de cerrar la activa y crear la nueva. Saludos... |
Va bien , pero falla cuando no hay ningún MDIActive en el Form .
Cuando llega a esta linea
Da error sino encuentra otro ActiveMDIChild , habría que poner algo , un if ... then , pero no sé que poner para que si no hay ningún MDIChildForm de error . |
Cierto, se me pasó ese detalle, aquí te va una versión que toma en cuenta ese pequeño error...
|
La franja horaria es GMT +2. Ahora son las 23:34:16. |
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