Compartir a través de


Cómo: Crear formularios MDI secundarios

Nota importanteImportante

En este tema se usa el control MainMenu, que se ha reemplazado por el control MenuStrip. El control MainMenu se conserva a efectos de compatibilidad con versiones anteriores y de uso futuro, si es necesario. Para obtener información acerca de cómo se crea un formulario MDI primario utilizando un objeto MenuStrip, vea Cómo: Crear una lista de ventanas MDI con MenuStrip (formularios Windows Forms).

Los formularios MDI secundarios son un elemento esencial de Aplicaciones de interfaz de múltiples documentos (MDI), cuando estos formularios son el centro de interacción del usuario.

En el procedimiento siguiente, creará formularios MDI secundarios que muestran un control RichTextBox, similar a la mayoría de aplicaciones de procesamiento de textos. Si sustituye el control System.Windows.Forms por otros controles, tales como el control DataGridView o una mezcla de controles, podrá crear ventanas secundarias MDI (y, por extensión, aplicaciones MDI) con diversas posibilidades.

Nota

Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones del menú Herramientas. Para obtener más información, vea Trabajar con valores de configuración.

Para crear formularios MDI secundarios

  1. Cree un formulario primario MDI con una estructura de menús que contenga los elementos de menú Archivo y Ventana de nivel superior y los elementos de menú Nuevo y Cerrar. Para obtener más información, vea Cómo: Crear formularios principales MDI.

  2. En la lista desplegable que se encuentra en la parte superior de la ventana Propiedades, seleccione el elemento de menú correspondiente al elemento Ventana y establezca el valor de la propiedad MdiList en true.

    Esto habilitará al menú Ventana para que mantenga una lista de ventanas secundarias MDI abiertas, con una marca de verificación junto a la ventana secundaria activa.

  3. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto, haga clic en Agregar y seleccione Agregar nuevo elemento.

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

    Nota

    El formulario secundario MDI que creará en este paso es un formulario Windows Forms estándar. Por tanto, tendrá una propiedad Opacity, que permite controlar la transparencia del formulario. Sin embargo, la propiedad Opacity está diseñada para ventanas de alto nivel. No la utilice con formularios MDI secundarios, porque pueden surgir problemas.

  4. En el cuadro de diálogo Agregar nuevo elemento, seleccione Formulario Windows Forms (en Visual Basic o Visual C#) o Aplicación de Windows Forms (.NET) (en Visual C++) desde el panel Plantillas. En el cuadro Nombre, asigne al formulario el nombre Form2. Haga clic en el botón Abrir para agregar el formulario al proyecto.

    Se abrirá el Diseñador de Windows Forms, donde se mostrará el formulario Form2.

  5. En el Cuadro de herramientas, arrastre un control RichTextBox al formulario.

  6. En la ventana Propiedades, establezca la propiedad Anchor en Top, Left y la propiedad Dock en Fill.

    Esto hace que el control RichTextBox llene por completo el área del formulario MDI secundario, aunque se cambie el tamaño del formulario.

  7. Cree un controlador de eventos Click para el elemento de menú Nuevo. Para obtener información sobre cómo crear controladores de eventos, vea Cómo: Crear controladores de eventos con el diseñador.

  8. Inserte el código siguiente para crear un nuevo 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 presente que, en función de las características específicas de la arquitectura de la aplicación, podría ser que el elemento de menú Nuevo no fuese 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 Visual C++, agregue la siguiente directiva #include al principio de Form1.h:

    #include "Form2.h"
    
  9. Presione F5 para ejecutar la aplicación. Observe que al seleccionar Nuevo en el menú Archivo, puede crear nuevos formularios MDI secundarios de los que se hará un seguimiento en el menú Ventana.

    Nota

    Cuando un formulario secundario MDI tiene un componente MainMenu (normalmente con una estructura de menú de elementos de menú) y se abre dentro de un formulario primario MDI que tiene un componente MainMenu (normalmente con una estructura de menú de 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 los componentes MainMenu y todos los elementos de menú del formulario secundario en MergeItems. Además, establezca el valor de la propiedad MergeOrder de modo que los elementos de ambos menús aparezcan en el orden deseado. Tenga en cuenta que al cerrar un formulario MDI primario, cada uno de los formularios MDI secundarios provoca un evento Closing antes de que se provoque el evento Closing del formulario MDI primario. La cancelación de un evento Closing del MDI secundario no evita que se provoque el evento Closing del MDI primario; sin embargo, el argumento CancelEventArgs para el evento Closing del MDI primario, se establecerá en true. Puede forzar el cierre del formulario MDI primario y todos los formularios secundarios estableciendo el argumento CancelEventArgs en false.

Vea también

Tareas

Cómo: Crear formularios principales MDI

Cómo: Determinar el formulario secundario MDI activo

Cómo: Enviar datos al formulario secundario MDI activo

Cómo: Organizar formularios MDI secundarios

Otros recursos

Aplicaciones de interfaz de múltiples documentos (MDI)