jueves, 28 de noviembre de 2013

Trabajando con Interfaces de Múltiples Documentos (MDI)

Cuando trabajamos con aplicaciones Windows existen dos tipos de interfaces o formas de presentar la información en pantalla, éstas son: 

  1. Interface de Simple Documento (SDI): Presenta un documento en su propia ventana, cada ventana es independiente. Por ejemplo, usan SDI; el Bloc de Notas, el Paint, el WordPad, Office 2000, etc. 
  2. Interface de Múltiples Documentos (MDI): Presenta todos los documentos sobre una ventana principal (formulario padre) sobre la cual se muestra cada documento en su  ventana secundaria (formulario hijo). Por ejemplo, usan MDI: el Visual Studio .NET, SQL Enterprise Manager, Office 97, etc. 

Hasta ahora todas las aplicaciones creadas que tienen más de un formulario han usado Interfaces de Simples Documentos (SDI). 

En esta parte, veremos cómo trabajar en .NET, las Interfaces de Múltiples Documentos (MDI); empezaremos aprendiendo a crear un formulario MDI padre y a crear formularios MDI hijos, después aprenderemos cómo organizar a éstos sobre la ventana principal o padre, y finalmente enseñaremos cómo trabajar con el formulario padre desde el hijo y cómo trabajar con el formulario hijo desde el padre. 

  • Creando un formulario MDI padre 
Para crear un formulario MDI Padre que será la ventana principal de la aplicación Windows, sólo hay que configurar la propiedad IsMdiContainer del formulario en True, ya que por defecto esta es False. 

Una vez creado el formulario MDI Padre, el Visual Studio .NET permite agregar todo tipo de controles, pero una buena práctica es sólo tener menús y barras de herramientas para organizar los comandos de la aplicación. 

El formulario MDI Padre creado se muestra en el Diseñador de Formularios Windows con un fondo gris más oscuro que el tradicional fondo gris claro de los formularios Windows, como se aprecia en la siguiente figura: 

  • Creando un Formulario MDI Hijo 
Para crear un formulario MDI Hijo que se muestre dentro de la ventana principal de la aplicación Windows, sólo hay que configurar la propiedad MdiParent del formulario hijo asignándole el formulario MDI Padre, tal como se muestra en el siguiente código: 


Nota: La propiedad MdiParent sólo está disponible en tiempo de ejecución, es decir; es obligatorio, realizar la configuración mediante código.
Observación: Si no se configura la propiedad MdiParent del formulario hijo, éste se muestra fuera del formulario MDI Padre.
Advertencia: Si se configura la propiedad MdiParent y se muestra el formulario Hijo con el método ShowDialog se generará una Excepción. 
Todos los formularios configurados con la propiedad MdiParent aparecerán sobre el formulario MDI Padre, tal como se aprecia en la siguiente figura:

Ventana de un formulario MDI Padre conteniendo 3 Hijos

  • Organizando Ventanas dentro del MDI 
Para organizar las ventanas hijas dentro de la ventana padre hay que usar el método LayoutMdi() del formulario Padre, el cual tiene como parámetros un valor o enumeración de tipo MdiLayout, tal como se muestra en el siguiente código: 

objPadre.LayoutMdi(valor) 
ó
objPadre.LayoutMdi(MdiLayout.Constante) 

Los valores o constantes de la enumeración MdiLayout y su efecto se muestra en el siguiente cuadro: 


Constante Valor Efecto
Cascade 0 Organiza las ventanas hijas en cascada.
TileHorizontal 1Muestra en mosaico horizontal las ventanas.
TileVertical 2Muestra en mosaico vertical las ventanas.
ArrangeIcons 3Alinea en la parte inferior los iconos o ventanas que han sido minimizadas.

Por ejemplo, si queremos organizar las ventanas en forma horizontal, escribir:

ó
Entonces, las ventanas se verán tal como se aprecia en la siguiente figura:

Ventanas hijas organizadas en Mosaico Horizontal.

  • Trabajando con el Formulario MDI Padre desde el Hijo
Si desde el formulario MDI hijo se quiere usar alguna característica del padre, se debe trabajar con la propiedad MdiParent del formulario hijo que apunta a la instancia actual del formulario padre. 

Por ejemplo, para mostrar el título del formulario padre como título del formulario hijo, tendríamos que escribir el siguiente código: 

objHijo.Text = objHijo.MdiParent.Text 
ó
Me.Text = Me. Mdi Parent.Text 

Nota: 
En la segunda sintaxis, me representa a la instancia actual del formulario hijo en el cual se escribe el código.

  • Trabajando con el Formulario MDI Hijo desde el Padre 
Si desde el formulario MDI padre se quiere usar alguna característica del hijo, hay que realizar dos pasos que son: 

1. Verificar si existen formularios hijos abiertos usando la propiedad Length del objeto MdiChildren que es una propiedad del formulario padre, similar al siguiente código: 

2. Acceder a una propiedad o control del formulario hijo usando el objeto ActiveMdiChild que es una propiedad del formulario padre, similar al siguiente código: 

Propiedad_Hijo = Me.ActiveMdiChild.Propiedad 
Control_Hijo = Me.ActiveMdiChild.Controls(N) 

Advertencia:Si se accede a una propiedad o control del formulario hijo sin existir instancias en el padre (paso 1) se generará una Excepción.

Ejemplo 27

Esta demostración tiene por objetivo enseñar a trabajar con interfaces de múltiples documentos (MDI). Se aprenderá a crear un formulario MDI padre y formularios MDI hijos, se verá como organizar las ventanas hijas dentro del padre y como invocar desde el formulario padre al hijo y viceversa. 

El ejemplo trabaja con dos formularios, uno es el formulario MDI padre y el otro es el formulario base para crear los MDI hijos. El padre tiene un menú principal con dos opciones, una llamada Archivo y otra Ventana; la primera opción permite crear un nuevo hijo, mostrar el mensaje escrito en la ventana hija activa y salir de la aplicación; la segunda opción permite organizar las ventanas hijas dentro del padre. 

Por su parte el formulario hijo permite ingresar un mensaje que se podrá recuperar desde la ventana padre y también visualiza un mensaje guardado en la propiedad Tag del formulario padre. 
Para lo cual debemos realizar los siguientes pasos: 

1. Crear una Aplicación Windows en Visual Basic .NET llamada Ejemplo27. EL IDE a utilizar es Microsoft Visual Studio 2012.



2. En la ventana del explorador de soluciones seleccionar el archivo Form1 y en la ventana de propiedades cambiar la propiedad FileName a frmPadre. 



3. En el diseñador de formularios Windows, arrastrar un control MenuStrip y configurar las propiedades, tal como se muestra en el siguiente cuadro: 


Objeto Propiedad Valor
Form1Name frmPadre
IsMdiContainer True
StartPosition CenterScreen
Tag NET es Orientado a Objetos
Text Ventana principal o MDI Padre
MenuStrip1Name mnuPrincipal


4. Seleccione el control MenuStrip y en la parte superior donde dice "Escriba Aquí" , escriba directamente los textos del menú y configure sus propiedades, tal como se muestra en el siguiente cuadro:

Objeto Propiedad Valor
ToolStripMenuItem1Name mnuArchivo
Text &Archivo
ToolStripMenuItem11Name mnuNuevoHijo
Text &NuevoHijo
ToolStripMenuItem12Name mnuMensajeHijo
Text &Mensaje Hijo
ToolStripMenuItem13Name mnuLineal
Text -
ToolStripMenuItem14Name mnuSalir
Text &Salir
ToolStripMenuItem2Name mnuVentana
Text &Ventana
ToolStripMenuItem21Name mnuCascada
MergeIndex0
Text &Cascada
ToolStripMenuItem22Name mnuMHorizontal
MergeIndex1
Text Mosaico &Horizontal
ToolStripMenuItem23Name mnuMVertical
MergeIndex2
Text Mosaico & Vertical
ToolStripMenuItem24Name mnuOIconos
MergeIndex3
Text &Organizar leonos
ToolStripMenuItem3Name mnuListar
Text &Listar Ventanas
mnuPrincipal MdiWindowListItem mnuListar


Nota: La propiedad MdiWindowListItem del control MenuStrip permite mostrar en forma automática un menú con la lista de todas las ventanas hijas abiertas. Para ello debe seleccionar el ToolStripMenuItem en el que se creará la lista.

5. Añadir un segundo formulario; del menú "Proyecto" elegir "Agregar Windows Forms...", escribir como nombre frmHijo y clic en "Agregar".




6. Seleccionar el formulario frmHijo, arrastrar 1 control Label, 1 TextBox y 1 Button, luego configurar sus propiedades, tal como se muestra en el siguiente cuadro:


Objeto PropiedadValor
Form1Name frmHijo
Size Width=300, Height=200
Text Ventana secundaria o MDI Hijo
Label1Name lblMensaje
AutoSize True
LocationX=20, Y=20
Text Mensaje:
TextBox1 Name txtMensaje
Anchor Top, Left, Right
Location X=84, Y=16
Size Width=190, Height=20
Text Este es un formulario hijo
Button1 Name btnMensajePadre
Anchor Top, Left, Right
Cursor Hand
Location X=50, Y=56
Size Width= 190, Height=23
Text Mostrar Mensaje desde el Padre


7. Regresar al formulario frmPadre y en la ventana explorador de soluciones dar clic en el botón "Ver código". 


8. Crear el procedimiento de evento CrearMostrarHijo, que controle el evento "Click" del menú "mnuNuevoHijo", tal como se muestra en el siguiente código: 


9. Crear el procedimiento de evento VerMensajeHijo, que controle el evento "Click" del menú "mnuMensajeHijo", tal como se muestra en el siguiente código: 


Nota:
Para obtener el mensaje escrito en el cuadro de texto del formulario hijo activo usamos la propiedad Text del Control(1) que es el TextBox del objeto ActiveMdiChild que devuelva el formulario hijo activo.
10. Crear el procedimiento de evento OrganizarVentanas, que controle los eventos "Click" de los menús "mnuCascada", "mnuMHorizontal", "mnuMVertical", "mnuOIconos", tal como se muestra en el siguiente código: 


Nota:Para organizar las ventanas hijas dentro del padre usamos el método LayoutMdi() y el valor lo obtenemos de la propiedad MergeIndex de cada menú que lo hicimos coincidir con los valores de la enumeración MdiLayout.

11. Para finalizar la aplicación, creamos el procedimiento de evento Salir, que controle el evento "Click" del menú "mnuSalir", tal como se muestra en el siguiente código: 


12. Regresar al formulario frmHijo y en la ventana explorador de soluciones dar clic en el botón "Ver código". 



13. Crear el procedimiento de evento VerMensajePadre, que controle el evento "Click" del botón "btnMensajePadre", tal como se muestra en el siguiente código: 

14. Configurar frmPadre como el formulario de inicio. Por defecto lo está.

15. Grabar y ejecutar la aplicación pulsando F5 .

Ventana del formulario MDI frmPadre del Ejemplo 27 

16. Del menú "Archivo" seleccionar "Nuevo Hijo" y se verá la figura: 


17. Abrir dos nuevos formularios hijos, seleccionar del menú "Ventana", las opciones "Mosaico Horizontal", "Cascada", "Mosaico Vertical"  y se verá como las siguientes figuras: 

Mosaico Horizontal

Cascada

Mosaico Vertical


Observación:Vea como en el menú "Lista Ventanas" aparece una lista.


18. Escribir un mensaje en cada una, luego ir seleccionando una a una y eligiendo del menú "Archivo", "Mensaje Hijo".

Observación:
Vea como coge el texto escrito en la ventana hija activa y lo muestra en un cuadro de mensaje desde el formulario padre.

19. Maximize la ventana hija y clic al botón "Mostrar mensaje desde el padre".

Observación:
Vea como coge el texto guardado en la propiedad Tag del formulario padre y lo muestra en el cuadro de texto del formulario hijo activo.

20. Finalize la ejecución de la aplicación, del menú "Archivo" elija "Salir".



Espero haber ayudado en algo. Adjunto el ejemplo en el siguiente enlace:

Ejemplo27 - Descargar

Hasta la próxima oportunidad!


1 comentario:

       

Etiquetas

Accediendo a datos con ADO .NET (31) Acceso a la red (30) Algoritmo (34) Algoritmos en JAVA (2) Ampliación de clases (2) APRENDA A PROGRAMAR COMO SI ESTUVIERA EN PRIMERO - Autores : IKER AGUINAGA (3) APRENDA A PROGRAMAR COMO SI ESTUVIERA EN PRIMERO - Autores : IKER AGUINAGA (10) Aprendiendo a desarrollar en Windows 8 (5) Aprendiendo UML en 24 Horas (Autor : Joseph Schmuller ) (30) Arquitectura (29) Arquitectura del Computador (3) Arquitectura del Computador - Historia de la informática (1) Asignación de direcciones IP (23) Aspectos fundamentales de bases de datos (5) Auditoría de la dirección (2) Auditoría de Sistemas (3) Auditoría Informática - Un enfoque práctico - Mario G . Piattini y Emilio del Peso (7) Avanzado (23) Base de Datos (67) Básico (23) Bios (29) Business Productivity Online Suite - BPOS (3) Capa de Red (22) Capa de Transporte (16) Capítulo 1 - Documentos HTML5 (6) Capítulo 10. API Web Storage (2) Capítulo 11. API IndexedDB (4) Capítulo 12. API File (1) Capítulo 2. Estilos CSS y modelos de caja (7) Capítulo 3. Propiedades CSS3 (4) Capítulo 4. Javascript (6) Capítulo 5. Video y audio (6) Capítulo 6. Formularios y API Forms (8) Capítulo 7. API Canvas (5) Capítulo 8. API Drag and Drop (2) Capítulo 9. API Geolocation (2) CCNA1 v5.0 (244) CCNA1 v6.0 (23) CCNA2 v5.0 (26) CCNA3 v5.0 (25) CCNA4 v5.0 (23) CD-ROM (3) Chapter 1 How does Xamarin.Forms fit in? (7) Chapter 2 Anatomy of an app (5) Cisco (346) Cloud Computing (3) CNNA v5.0 Routing & Switching (265) CNNA v6.0 Routing & Switching (2) Codigo (2) Computadora (32) Configuración (29) Configuración de un sistema operativo de red (21) Control (29) Creación de tipos de datos y tablas (3) Creación y Administración de bases de datos (3) Creando la Interface de la Aplicación Windows (50) Creating Mobile Apps with Xamarin.Forms (13) Cuenta (29) Curso (32) Curso Aprendiendo a Programar (25) Datos (3) Desarrollando en Windows 8 - AVANZADO (2) Desarrollando en Windows 8 - BÁSICO (3) Desarrollando en Windows 8 - INTERMEDIO (2) Desarrollo (2) Desarrollo .Net (21) Desarrollo avanzado de Windows Store Apps usando C# (1) Desarrollo basado en conceptos de Ingeniería de Software para Visual Studio (2) DESARROLLO DE APLICACIONES WINDOWS CON MICROSOFT .NET (37) DESARROLLO DE APLICACIONES WINDOWS CON MICROSOFT .NET (Autor: Luis Dueñas Huaroto) (29) Desarrollo en Microsoft Visual Studio (44) Desarrollo en Microsoft Visual Studio - AVANZADO (15) Desarrollo en Microsoft Visual Studio - BÁSICO (14) Desarrollo en Microsoft Visual Studio - INTERMEDIO (18) Desarrollo en Windows Phone 8 (13) Diagnostico (4) Diagrama (3) Diagramas de actividades (2) Diagramas de colaboraciones (2) Diagramas de secuencias (2) Digital (2) Diplomado (2) Disco (29) Disco Duro (4) Diseño de aplicaciones de Windows 8 en HTML 5 (7) Dispositivos Electrónicos (11) Doctorado (2) Ejemplos de algoritmos (27) El camino hacia el CSS3 (3) El diseño web flexible (6) El elemento de diseño Canvas (3) El enfoque de los sistemas (3) El flujo de un programa (2) El gran libro de HTML5 - CSS3 y Javascript - Autor: Juan Diego Gauchat (55) El principio de organicidad (7) Electrónica (2) Elementos de un sistema (5) Empresas (2) Entrada y salida (4) Entropía y neguentropía (7) Estrategia (2) Estructura de un programa Java (12) Estructuras de almacenamiento (10) Estructuras de control (6) Estructuras de las tablas en SQL Server (2) Estructuras fundamentales de los datos (2) Ethernet (21) Evolución y Familias de los Microprocesadores (15) Exámen (23) Exploración de la red (23) Extensión de clases (4) Facebook (4) Familia Intel (15) Forefront (8) Función (3) Funciones de una red (12) Funciones de una red informática (1) Fundamentos de C# para absolutos principiantes (17) Fundamentos de programación en Java (50) Generaciones de la computadora (5) Gestión (3) Gestión de riesgos - Auditoría de Sistemas (1) GONZALO MARTÍNEZ (1) Grupos Facebook (1) Harvard (29) Historia de las computadoras (11) HTML5 y CSS3 - Autor: Christophe Aubry (99) HTML5 y CSS3 aplicadal texto (7) HTML5 y CSS3 para los formularios (15) Imágenes (2) Implementación de Windows 7 (11) Información (31) Informática (29) Ingeniería (4) Instalar (29) Inteligencia (2) Inteligencia de Negocios con SQL Server (3) Intermedio (23) Internet (29) Internet Explorer 9 (3) Introducción a ASP.NET 5 (8) Introducción a Java (7) Introducción a jQuery (8) Introducción a la Auditoría de Sistemas (2) Introducción a la teoría general de sistemas (Oscar Johansen Bertoglio) (39) Introducción a Networking (2) Introducción a Window Forms (5) Introducción al acceso a datos con ADO .NET (9) Investigación de Operaciones (12) Java (52) Jump Start de consultas en las bases de datos de Microsoft SQL Server 2012 (8) La definición de un Sistema (6) La evolución del HTML y del CSS (3) La nueva sintaxis HTML5 (12) LA QUINTA DISCIPLINA en la práctica (Autor : Peter Senge) (28) Las animaciones en CSS3 (5) Las transformaciones CSS3 (11) Las transiciones con CSS3 (8) Licenciamiento Microsoft (3) Local Area Network (LAN) - Red de Area Local (2) Lógico (2) Los elementos de la estructura en html5 (9) Los elementos multimedia: audio y vídeo (2) Los estilos de caja en CSS3 (13) Los nuevos selectores de CSS3 (6) Maestría (2) Mantenimiento de Mouse y Teclado (2) Manual de Microsoft SQL Server - Full Transact SQL (68) Manual de soporte técnico para escuelas sobre windows 7 (42) Marco Teorico de Investigación de Operaciones (6) Medios de Almacenamiento (11) Medios de Networking (2) Mejorando la Interface de las Aplicaciones Windows (26) Memoria Tipos y Clases (5) Método (2) Metodología (1) Microsoft (324) Microsoft Lync 2010 (7) Microsoft Silverlight 4.0 (2) Microsoft Virtual Academy (356) Modelo (2) Modelo OSI y TCP-IP (2) Modelos con poco grado de dificultad de Programación Lineal - Investigación de Operaciones (13) Modelos con razonable grado de dificultad de Programación Lineal - Investigación de Operaciones (10) Modelos de desafio de Programación Lineal - Investigación de Operaciones (5) Modelos difíciles de Programación Lineal - Investigación de Operaciones (5) Modelos Fáciles de Programación Lineal - Investigación de Operaciones (13) Modelos lineales con solver (3) Modulo (23) Movimiento (2) Mozilla (29) MS SQL Server (77) MS Virtualization para Profesionales VMware - Gestión (3) MS Virtualization para Profesionales VMware- Plataforma (4) MVA (263) Negocio (2) Nivel Avanzado Desarrollo .Net (6) Nivel Básico Desarrollo .Net (11) Nivel Intermedio Desarrollo .Net (8) Normas técnicas peruanas y su evolución - Auditoría de Sistemas (1) Nube Privada - Avanzado (6) Nube Privada - Básico (6) Nube Privada - Intermedio (6) Office 365 (3) Optimización de Escritorio (10) Optimización de Escritorio - Avanzado (4) Optimización de Escritorio - Básico (3) Optimización de Escritorio - Intermedio (3) ORACLE 10g - ADMINISTRACIÓN Y ANÁLISIS (3) Oracle 10g y el Grid Computing (3) Organización aleatoria y secuencial (1) Partes principales de la Mainboard (12) Perceptron (2) Perfil (2) Periféricos de Entrada / Salida (15) Pesi (2) PHP y MySQL - Manual de aprendizaje para crear un sitio web - Autor : Olivier ROLLET (79) Plan (2) Plataforma (29) PMBOK (24) PMBOK - Guía de los fundamentos para la dirección de proyectos (24) PMBOK - INFLUENCIA DE LA ORGANIZACIÓN Y CICLO DE VIDA DEL PROYECTO (6) PMBOK - Introducción (11) PMBOK - PROCESOS DE LA DIRECCIÓN DE PROYECTOS (5) Prevención - Herramientas e Instrumentos de Medida (9) Principios básicos de enrutamiento y switching (218) Proceso (2) Proceso de auditoría de sistemas informáticos (2) Programación en Android - Auor : Salvador Gómez Oliver (46) Programación paso a paso de C# - Autor : Nacho Cabanes (16) Protocolos y comunicaciones de red (17) Proyecto (2) Qué es un sistema (4) Red de Área Local Inalámbrica (WLAN) (4) Redes (30) Redes inalámbricas - WIRELESS - Conocimiento general (15) Redes neuronales (2) Redes y Comunicaciones (45) Reparación de Fuentes - UPS - Estabilizadores (10) Reparación de Impresoras (9) Reparación de Monitores (16) Router (29) Seguridad en la Nube (3) Seminario (23) Server (24) Sharepoint 2010 - Nivel Básico (6) Sharepoint 2010 - Niveles Avanzados (18) Sharepoint 2010 - Niveles Avanzados - Básico (8) Sharepoint 2010 - Niveles Avanzados - Intermedio (9) Sinergia y recursividad (4) Sistema (33) Sistema de Cableado Estructurado (9) Software (30) SOLUCIÓN GRÁFICA DE MODELOS DE PROGRAMACIÓN LINEALES - INVOPE (8) Soporte a Infraestructura (3) SQL (38) SQL Azure - Introducción (3) Subsistemas de control (4) Tablas (4) Tarjeta Principal del Sistema (10) Tarjetas de Interfaces (7) Tecnología (31) Tecnologías LAN (1) TEORÍA GENERAL DE SISTEMAS (1) Tic (2) Tipo (2) TML5 y CSS3 - Autor: Christophe Aubry (12) Trabajando con el Formulario (7) Un diseño HTML5/CSS3: dConstruct 2011 (3) Un diseño HTML5/CSS3: FlipThru (2) Un diseño HTML5/CSS3: The Cat Template (2) Usando Controles Windows Forms (12) Usando Herramientas de Datos de Visual Studio (6) Ventas (2) Virtualización Hyper - V Nivel Básico (5) Virtualización Hyper - V Nivel Intermedio (5) What’s New in Windows 8.1 Security (4) Window (29) Windows 7 Segunda Fase - AVANZADO (4) Windows 7 Segunda Fase - BÁSICO (6) Windows 7 Segunda Fase - INTERMEDIO (4) Windows 8 - Vista Previa (4) Windows 8.1 To Go (2) Windows Azure (3) Windows Phone 7 (2) Windows Server 2008 R2 (3) Windows Server 2012 - Gestión y Automatización (3) Windows Server 2012 R2 Essentials (7) Windows Server 2012: Almacenamiento (5) Windows Server 2012: Identidad y Acceso (4) Windows Server 2012: Revisión Técnica (7) Xamarin (1)

Páginas vistas en total según Google