Procedimiento para crear formularios secundarios MDI

Los formularios secundarios MDI son un elemento esencial de las aplicaciones de interfaz de múltiples documentos (MDI), ya que estos formularios son el centro de la interacción del usuario.

En el procedimiento siguiente, usará Visual Studio para crear un formulario secundario MDI que muestre un control RichTextBox, similar a la mayoría de las aplicaciones de procesamiento de texto. Si sustituye el control System.Windows.Forms por otros controles, como el control DataGridView, o por una mezcla de controles, podrá crear ventanas secundarias MDI (y, por extensión, aplicaciones MDI) con diversas posibilidades.

Creación de formularios secundarios MDI

  1. Cree un proyecto de aplicación de Windows Forms en Visual Studio. En la ventana Propiedades del formulario, establezca la propiedad IsMdiContainer en true y la propiedad WindowsState en Maximized.

    Esto hace que el formulario se designe como contenedor MDI de las ventanas secundarias.

  2. Desde el Toolbox, arrastre un control MenuStrip al formulario. Establezca la propiedad Text en Archivo.

  3. Haga clic en el botón de puntos suspensivos (...) junto a la propiedad Elementos y haga clic en Agregar para agregar dos elementos de menú de barra de herramientas secundarios. Establezca la propiedad Text de estos elementos en Nuevo y Ventana.

  4. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto y seleccione Agregar>Nuevo elemento.

  5. En el cuadro de diálogo Agregar nuevo elemento, seleccione Windows Form (en Visual Basic o Visual C#) o Aplicación de Windows Forms (.NET) (en Visual C++) en el panel Plantillas. En el cuadro Nombre, asigne al formulario el nombre Form2. Seleccione Abrir agregar el formulario al proyecto.

    Nota:

    El formulario secundario MDI creado en este paso es un Windows Form estándar. Como tal, tiene una propiedad Opacity, que le permite controlar la transparencia del formulario. Sin embargo, la propiedad Opacity se diseñó para ventanas de nivel superior. No la use con formularios secundarios MDI porque se pueden producir problemas de dibujo.

    Este formulario será la plantilla para los formularios secundarios MDI.

    Se abre el Diseñador de Windows Forms, en el que se muestra Form2.

  6. Desde el Cuadro de herramientas, arrastre un control RichTextBox al formulario.

  7. En la ventana Propiedades, establezca la propiedad Anchor en Arriba a la izquierda y la propiedad Dock en Rellenar.

    Esto hace que el control RichTextBox rellene completamente el área del formulario MDI secundario, incluso cuando se cambia el tamaño del formulario.

  8. Haga doble clic en el elemento de menú Nuevo para crear un controlador de eventos Click para él.

  9. Inserte código similar al siguiente para crear un formulario MDI secundario cuando el usuario haga clic en el elemento de menú Nuevo.

    Nota:

    En el ejemplo siguiente, el controlador de eventos controla el evento Click para MenuItem2. Tenga en cuenta que, según las particularidades de la arquitectura de su aplicación, puede que el elemento de menú Nuevo no sea MenuItem2.

    Protected Sub MDIChildNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
       Dim NewMDIChild As New Form2()
       'Set the Parent Form of the Child window.
       NewMDIChild.MdiParent = Me
       'Display the new form.
       NewMDIChild.Show()
    End Sub
    
    protected void MDIChildNew_Click(object sender, System.EventArgs e){
       Form2 newMDIChild = new Form2();
       // Set the Parent Form of the Child window.
       newMDIChild.MdiParent = this;
       // Display the new form.
       newMDIChild.Show();
    }
    
    private:
       void menuItem2_Click(System::Object ^ sender,
          System::EventArgs ^ e)
       {
          Form2^ newMDIChild = gcnew Form2();
          // Set the Parent Form of the Child window.
          newMDIChild->MdiParent = this;
          // Display the new form.
          newMDIChild->Show();
       }
    

    En C++, agregue la siguiente directiva #include al principio de Form1.h:

    #include "Form2.h"
    
  10. En la lista desplegable situada en la parte superior de la ventana Propiedades, seleccione la franja de menú que corresponde a la franja de menú Archivo y establezca la propiedad MdiWindowListItem en el elemento ToolStripMenuItem de la ventana.

    Esto permite al menú Ventana mantener una lista de las ventanas MDI secundarias abiertas con una marca de verificación junto a la ventana secundaria activa.

  11. Presione F5 para ejecutar la aplicación. Seleccione Nuevo en el menú Archivo para crear formularios MDI secundarios, de los que se realiza un seguimiento en el elemento de menú Ventana.

    Nota:

    Cuando un formulario MDI secundario tiene un componente MainMenu (por lo general, con una estructura de menús con elementos de menú) y se abre dentro de un formulario MDI primario que tiene un componente MainMenu (por lo general, con una estructura de menús con elementos de menú), los elementos de menú se combinan automáticamente si ha establecido la propiedad MergeType (y, opcionalmente, la propiedad MergeOrder). Establezca la propiedad MergeType de ambos componentes MainMenu y todos los elementos de menú del formulario secundario en MergeItems. Además, establezca la propiedad MergeOrder para que los elementos de ambos menús aparezcan en el orden deseado. Tenga en cuenta también que, cuando se cierra un formulario MDI primario, cada uno de los formularios MDI secundarios genera un evento Closing antes de que se produzca el evento Closing para el formulario MDI primario. Cancelar el evento Closing de un elemento MDI secundario no impedirá que se produzca el evento Closing del elemento MDI primario; sin embargo, el argumento CancelEventArgs del evento Closing del elemento MDI primario ahora se establecerá en true. Puede forzar el cierre del formularios MDI primario y de todos los formularios MDI secundarios estableciendo el argumento CancelEventArgs en false.

Consulte también