Opción para MDIContainer

Opción valida para MDIContainer


Un día necesite tener un form dentro de otro form y que el ultimo contuviera otros forms. Cosa que con MDI no pude hacer ya que me encontré con un error del que hable en mi post anterior. La solución la era muy fácil, solo había que estudiar un poco las propiedades de los controles de un winform. Como explique los controles tienen una propiedad llamada Controls, que no es más que una colección de controles. En la colección se pueden añadir controles incluidos los formularios, siempre y cuando la propiedad TopLevel este marcada como falsa, o sea, no sea un formulario de nivel superior.

Hagamos un ejemplo práctico. En Visual Studio, creamos un proyecto de Windows, una Aplicación de Windows Forms, yo la llame MDIAlterno. Automáticamente, Visual Studio crea el formulario Form1.cs, yo le cambie el nombre a Padre.cs, por que este formulario es donde voy a alojar los demás formularios.




En nuestro formulario Padre, creamos un panel, que es donde vamos a alojar las opciones de nuestro menú, lo llamamos Panelmenu; además agregamos un FlowLayoutPanel lo llamamos flp, que es donde vamos a poner los formularios minimizados, ponemos la propiedad AutoScroll en True, esto va a permitir que cuando agreguemos mas controles nos muestre una barra de scroll si se llega a llenar el FlowLayoutPanel; después agregamos un Panel al que llamaremos PanelPrincipal, en este panel alojaremos los formularios que necesitamos abrir.




En la vista de codigo de nuestro formulario padre agregamos el AbrirFormulario:




El método recibe como parámetro un objeto de tipo Form llamado f, al formulario f lo preparamos para que pueda ser visible en un control, esto es establecer la propiedad TopLevel en false, además en el Tag de f le agregamos nuestro FlowLayautPanel, para que cuando minimicemos el formulario lo pueda encontrar fácilmente. El WindowState permite cambiar el estado de la ventana, entre Maximized, Minimized y Normal. Después utilizando la Colección Controls del PanelPrincipal, agregamos nuestro formulario, por ultimo lo mostramos.

Una vez hecho lo anterior necesitamos crear un formulario base, en el cual vamos a escribir los comportamientos de los formularios que agregaremos a nuestro PanelPrincipal. El formulario lo llamaremos ParaHeredar.cs






En el evento Rezise de nuestro formulario ParaHeredar, hacemos lo siguiente:

  
El boton que vimos que agregue le vamos a agregar un evento.


Cuando hagamos clic sobre el botón lo que haremos es mostrar el formulario maximizarlo, para que se ejecute el evento Resize y se esconda el sacamos el botón de la colección de controles del FlowLayoutPanel.


Bueno ahora podemos agregar un par de formularios mas, y para que tengan el mismo comportamiento y funcionen para lo que queremos, le decimos que hereden de ParaHeredar.



Una vez eso, lo que hacemos es irnos al formulario principal y agregar los botones necesarios para abrir nuestro form y probamos.




Ahora bien, para simular el comportamiento de tener un MDI dentro de otro MDI, lo que debemos hacer es decirle a nuestro form Padre que herede del form ParaHeredar. No publicare el resultado para que sientan la emoción de crearlo.


Bueno eso es todo, con un poco más de imaginación y tiempo, pueden salir muchas cosas buenas. Espero lo hayan disfrutado.

http://hotfile.com/dl/25697351/6f9524a/MDIAlterno.zip.html

Comentarios

Publicar un comentario

Entradas populares de este blog

Problemas con MDI en .Net y una pequeña solución

Un poquito System.Activator