Aplicaciones de estilo MDI

Aplicaciones de estilo MDI

Una aplicación de tipo o estilo MDI (Multiple Document Interface), Interfaz de Documento Múltiple, se compone de un formulario principal, también denominado formulario MDI, que actuará como contenedor de otros formularios (documentos) abiertos durante el transcurso del programa, denominados formularios hijos o secundarios MDI. Como ejemplos de este tipo de aplicación tenemos PowerPoint o Access.

A diferencia de lo que ocurría en versiones anteriores de VB, un formulario MDI admite los mismos controles que un formulario normal, aunque dada su orientación de formulario contenedor, se recomienda limitar los controles en un MDI a los estrictamente necesarios. El menú es el ejemplo más identificativo de control idóneo para un formulario MDI, ya que a través de sus opciones, podremos abrir los formularios hijos de la aplicación.

Programación con Visual Basic .NET © Grupo EIDOS

Seguidamente describiremos el proceso de creación de un proyecto que contenga un formulario MDI y dos formularios hijos, así como el comportamiento de estos últimos cuando son abiertos dentro del formulario padre MDI. Este ejemplo tiene el nombre MDIPru, y se debe hacer clic aquí para acceder al mismo.

Una vez creado el nuevo proyecto, cambiaremos el nombre del formulario por defecto a frmPrincipal. Para conseguir que este formulario tenga el comportamiento de un contenedor MDI, debemos asignar el valor True a su propiedad IsMdiContainer. También debemos establecer a este formulario como inicial en las propiedades del proyecto.

Ahora pasaremos a la creación de los formularios hijos del MDI. El primero, frmCarta, permite la escritura en un TextBox multilínea, cuyo contenido podremos grabar a un archivo en disco. La Figura 291 muestra este formulario.

Figura 291. Formulario hijo de MDI para escribir un texto largo.

El código del botón que realiza la grabación del texto lo podemos ver en el Código fuente 497. Debemos importar el espacio de nombres System.IO, ya que en esta clase del formulario hacemos uso

de los tipos File y StreamWriter.

Private Sub btnGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGrabar.Click

' escribir en un archivo el contenido ' del TextBox Dim oEscritor As StreamWriter oEscritor = File.CreateText(Me.txtArchivo.Text) oEscritor.Write(Me.txtCarta.Text) oEscritor.Close()

End Sub

Código fuente 497

© Grupo EIDOS 33. Formularios de interfaz múltiple (MDI)

El otro formulario hijo, frmInfo, muestra la fecha y hora actual; esta última es actualizada a través del control Timer tmrTiempo. Ver la Figura 292.

Figura 292. Formulario hijo de MDI para mostrar fecha y hora actuales.

El Código fuente 498 muestra las instrucciones que se ejecutan en el evento Tick del control Timer.

Private Sub tmrTiempo_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrTiempo.Tick

Dim dtFecha As Date dtFecha = DateTime.Today Dim dtHora As Date dtHora = DateTime.Now

Me.lblFecha.Text = dtFecha.ToString("d/MMM/yyyy") Me.lblHora.Text = dtHora.ToString("h:m:s")

End Sub

Código fuente 498

El siguiente paso consiste en crear un menú para poder abrir los formularios hijos a través de sus opciones. Ver Figura 293.

Figura 293. Menú del formulario MDI.

En las opciones Carta e Información del menú, instanciaremos un objeto del formulario correspondiente, teniendo en cuenta que para conseguir que dichos formularios se comporten como hijos del MDI, debemos asignar a su propiedad MdiParent, la instancia actual del formulario en ejecución, es decir, Me. Veamos este punto en el Código fuente 499.

Programación con Visual Basic .NET © Grupo EIDOS

Private Sub mnuCarta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuCarta.Click

Dim ofrmCarta As New frmCarta() ' con la siguiente línea conseguimos que el ' formulario se comporte como hijo del actual ofrmCarta.MdiParent = Me ofrmCarta.Show()

End Sub

Private Sub mnuInformacion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuInformacion.Click

Dim ofrmInfo As New frmInfo() ' con la siguiente línea conseguimos que el ' formulario se comporte como hijo del actual ofrmInfo.MdiParent = Me ofrmInfo.Show()

End Sub

Código fuente 499

En la Figura 294 mostramos el formulario MDI en ejecución, conteniendo a los formularios hijos dependientes.

Figura 294. Aplicación MDI en ejecución.

Creación de menús de tipo Ventana, en formularios MDI

Es probable que el lector haya observado, en algunas aplicaciones Windows de tipo MDI, que existe en la barra de menús de la ventana principal, un menú con el nombre Ventana o Window (depende del

© Grupo EIDOS 33. Formularios de interfaz múltiple (MDI)

idioma del programa), que nos muestra los nombres de los formularios hijos abiertos, permitiéndonos cambiar de formulario activo al seleccionar una de esas opciones.

En nuestras aplicaciones MDI también podemos disponer de un menú de este tipo, añadiendo una nueva opción al menú principal del formulario MDI, y asignando a su propiedad MdiList el valor True.

Adicionalmente, y para darle un aspecto más profesional a este menú, podemos añadir los MenuItem correspondientes a la organización de los formularios hijos en Cascada, Mosaico Horizontal, etc. Para organizar los formularios abiertos en la aplicación en alguno de estos modos, deberemos ejecutar el método LayoutMdi( ) del formulario MDI, pasándole como parámetro uno de los valores correspondiente a la enumeración MdiLayout. El Código fuente 500 muestra las opciones correspondientes a la organización en cascada y en mosaico horizontal de nuestro ejemplo.

Private Sub mnuCascada_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuCascada.Click

Me.LayoutMdi(MdiLayout.Cascade)

End Sub

Private Sub mnuHorizontal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuHorizontal.Click

Me.LayoutMdi(MdiLayout.TileHorizontal)

End Sub

Código fuente 500

La Figura 295 muestra el mencionado menú Ventana de este proyecto, en cual contiene en este caso los nombres de los formularios abiertos que acaban de ser organizados en mosaico vertical.

Figura 295. Menú ventana en formulario MDI.

Programación con Visual Basic .NET © Grupo EIDOS