Está en la página 1de 3

Los formularios secundarios MDI son un elemento esencial de las Aplicaciones de

interfaz de mltiples documentos (MDI), ya que estos formularios son el centro de la


interaccin del usuario.
En el siguiente procedimiento, va a crear formulario MDI secundario que muestra un
control RichTextBox, similar a la mayora de las aplicaciones de procesamiento de
texto. Sustituir el control System.Windows.Forms por otros controles, como el
control DataGridView, o por una mezcla de controles permite crear ventanas
secundarias MDI (y, por extensin, aplicaciones MDI) con diversas posibilidades.

Creamos un nuevo proyecto, se aade un formulario llamado Form1, le dejamos ese


nombre. El form se muestra por defecto, por tanto vamos a la ventana de propiedades
(si no est activa, puedes pulsar F4), buscamos la propiedad IsMdiContainer y le
asignamos el valor True (por defecto tiene el valor False).
A partir de ahora ya tenemos un formulario MDI principal, y notaremos que es as
porque el fondo del formulario cambia de color usando el que tengamos
predeterminado en el sistema, normalmente es un fondo gris oscuro.
Para aadir el formulario hijo, el que contendr cada uno de los documentos,
simplemente adelo desde el men Proyecto>Agregar Windows Forms, dejamos
el nombre que le da por defecto: Form2.
Aadimos un textbox, y asignamos la propiedad MultiLine a True, el tipo de letras lo
puedes poner como Courier New, tambin debes asignar a la propiedad Dock el
valor Fill (el botn que hay en el centro de las opciones que te muestra al seleccionar
esa propiedad desde la ventana de propiedades).

Mostrar un nuevo formulario hijo


El men Nuevo lo usaremos para aadir o abrir nuevas ventanas de documentos
(Form2), para que un formulario sea un formulario hijo del form principal, tenemos
que asignar a la propiedad MdiParent del formulario hijo el formulario que lo
contendr, para Visual Basic lo haremos con:
<formulario>.MdiParent = Me

Para C# lo haremos de esta otra forma:

<formulario>.MdiParent = this;

Para poder crear nuevas ventanas debemos crear nuevas instancias del formulario hijo
(Form2), esto lo haremos con este cdigo, para VB lo hacemos con:
Dim frm2 As New Form2

Para C# lo hacemos con:


Form2 frm2 = new Form2();

Despus asignamos la propiedad MdiParent y finalmente mostramos el formulario


recin creado con frm2.Show().

Mostrar el formulario hijo maximizado al crearlo


Si queremos que el formulario recin creado se muestre maximizado o minimizado
podemos asignar el valor que queramos a la propiedad WindowState del objeto que
acabamos de crear: (para C# aade un ; al final)
frm2.WindowState = FormWindowState.Maximized

Esta lnea de cdigo la pondremos antes de llamar al mtodo Show.

Cerrar el formulario hijo que est activado


Cuando pulsamos en la opcin Cerrar ventana del men Ficheros, debemos averiguar
cual es el formulario que actualmente tiene el foco, esto lo averiguamos usando la
propiedad ActiveMdiChild del formulario principal. Debido a que esa propiedad es del
tipo Form, debemos hacer una conversin al tipo adecuado, en nuestro caso del tipo
Form2, al menos si tenemos activado la comprobacin estricta, que es como siempre
debe estar: Option Strict On, y si eres de los que no suelen tener esa opcin
conectada... pues si quieres llevarte bien conmigo... debes tener siempre activada esa
opcin.
Sigamos, en C# no hace falta tener activada la opcin estricta porque siempre hay
que hacer las conversiones de forma "correcta", as que... veamos tanto el cdigo de

VB como el de C# para saber cual es el formulario hijo que est activo, adems en la
misma asignacin declaramos una variable del tipo Form2.
Dim frm2 As Form2 = CType(Me.ActiveMdiChild, Form2)
Form2 frm2 = (Form2)this.ActiveMdiChild;

Una vez que tenemos el formulario hijo que est activo, podemos llamar al mtodo
Close para cerrarlo, pero... je, je, s, siempre hay (o puede haber) un pero... es
posible que no haya ningn formulario activo, por ejemplo si no tenemos ningn
documento abierto, por tanto deberamos comprobar si esa variable (frm2) tiene un
valor nulo, y en caso de que no sea as, podremos llamar de forma segura al mtodo
Close, veamos el cdigo de VB y C#:
If Not frm2 Is Nothing Then
frm2.Close()
End If
if( frm2 != null )
{
frm2.Close();
}

También podría gustarte