Comment : créer des formulaires MDI enfants

Important

Cette rubrique utilise le contrôle MainMenu, qui a été remplacé par le contrôle MenuStrip. Le contrôle MainMenu est conservé à des fins de compatibilité descendante et d'utilisation future, si vous le voulez. Pour plus d'informations sur la création d'un formulaire MDI parent à l'aide d'un MenuStrip, consultez Comment : créer une liste des fenêtres MDI avec MenuStrip (Windows Forms).

Les formulaires MDI enfants représentent un élément essentiel des Applications d'interface multidocument (MDI, Multiple Document Interface), car ils constituent le centre de l'interaction utilisateur.

Dans la procédure ci-dessous, vous allez créer des formulaires MDI enfants qui affichent un contrôle RichTextBox similaire à la plupart des applications de traitement de texte. En substituant au contrôle System.Windows.Forms d'autres contrôles, comme le contrôle DataGridView, ou un mélange de contrôles, vous pouvez créer des fenêtres MDI enfants (et, par extension, des applications MDI) avec diverses possibilités.

Notes

Les boîtes de dialogue et les commandes de menu qui s'affichent peuvent être différentes de celles qui sont décrites dans l'aide, en fonction de vos paramètres actifs ou de l'édition utilisée. Pour modifier vos paramètres, choisissez Importation et exportation de paramètres dans le menu Outils. Pour plus d'informations, consultez Utilisation des paramètres.

Pour créer des formulaires MDI enfants

  1. Créez un formulaire MDI parent dont la structure de menus contient les éléments de menu de niveau supérieur Fichier et Fenêtre, ainsi que les éléments de menu Nouveau et Fermer. Pour plus d'informations sur la création de formulaires MDI parents, consultez Comment : créer des formulaires MDI parents.

  2. Dans la liste déroulante située en haut de la fenêtre Propriétés, sélectionnez l'élément de menu correspondant à l'élément &Fenêtre et affectez la valeur true à la propriété MdiList.

    Vous activez ainsi le menu Fenêtre qui permet de tenir à jour une liste des fenêtres MDI enfants ouvertes et indique par une coche la fenêtre enfant active.

  3. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur votre projet, pointez sur Ajouter, puis sélectionnez Ajouter un nouvel élément.

    Le formulaire devient le modèle de vos formulaires MDI enfants.

    Notes

    Le formulaire MDI enfant que vous créez à cette étape est un Windows Form standard. En tant que tel, il comporte une propriété Opacity qui vous permet de contrôler sa transparence. Toutefois, la propriété Opacity a été conçue pour les fenêtres de niveau supérieur. Par conséquent, ne l'utilisez pas avec des formulaires MDI enfants, car vous pouvez rencontrer des problèmes de peinture.

  4. Dans la boîte de dialogue Ajouter un nouvel élément, sélectionnez Windows Form (en Visual Basic ou en Visual C#), ou encore Application Windows Forms (.NET) (en Visual C++) à partir du volet Modèles. Dans la zone Nom, entrez Form2. Cliquez sur le bouton Ouvrir pour ajouter le formulaire au projet.

    Le Concepteur Windows Forms s'ouvre et affiche le formulaire Form2.

  5. À partir de la Boîte à outils, faites glisser un contrôle RichTextBox dans le formulaire.

  6. Dans la fenêtre Propriétés, affectez la valeur Top, Left à la propriété Anchor et la valeur Fill à la propriété Dock.

    Le contrôle RichTextBox remplit ainsi totalement la zone du formulaire MDI enfant, et cela même lorsque le formulaire est redimensionné.

  7. Créez un gestionnaire d'événements Click pour l'élément de menu Nouveau. Pour plus d'informations sur la création de gestionnaires d'événements, consultez Comment : créer des gestionnaires d'événements à l'aide du concepteur.

  8. Insérez un code semblable au suivant pour créer un nouveau formulaire MDI enfant lorsque l'utilisateur clique sur l'élément de menu Nouveau.

    Notes

    Dans l'exemple suivant, le gestionnaire d'événements gère l'événement Click pour MenuItem2. Toutefois, sachez que, dans certaines architectures d'application, l'élément de menu Nouveau n'est pas 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++, ajoutez la directive #include suivante en haut de Form1.h :

    #include "Form2.h"
    
  9. Appuyez sur F5 pour exécuter l'application. En sélectionnant Nouveau dans le menu Fichier, vous pouvez créer des formulaires MDI enfants dont la liste est tenue à jour dans le menu Fenêtre.

    Notes

    Lorsqu'un formulaire MDI enfant possède un composant MainMenu (comportant généralement une structure de menus) et qu'il est ouvert au sein d'un formulaire MDI parent possédant un composant MainMenu (comportant généralement une structure de menus), les éléments de menus sont automatiquement fusionnés si vous avez défini la propriété MergeType (et éventuellement la propriété MergeOrder). Définissez la propriété MergeType des deux composants MainMenu et tous les éléments de menus du formulaire enfant en affectant la valeur MergeItems. De même, affectez la propriété MergeOrder de telle sorte que les éléments de menus des deux menus apparaissent dans l'ordre souhaité. Par ailleurs, gardez à l'esprit que, lorsque vous fermez un formulaire MDI parent, chaque formulaire MDI enfant déclenche un événement Closing avant qu'il ne soit Closing déclenché pour le formulaire MDI parent. L'annulation d'un événement Closing d'un formulaire MDI enfant n'empêchera pas le déclenchement de l'événement Closing d'un formulaire MDI parent ; toutefois, l'argument CancelEventArgs pour l'événement Closing du formulaire MDI parent a désormais la valeur true. Vous pouvez forcer la fermeture du formulaire MDI parent et de tous les formulaires MDI enfants en affectant à l'argument CancelEventArgs la valeur false.

Voir aussi

Tâches

Comment : créer des formulaires MDI parents

Comment : déterminer l'enfant MDI actif

Comment : envoyer des données à l'enfant MDI actif

Comment : réorganiser des formulaires MDI enfants

Autres ressources

Applications d'interface multidocument (MDI, Multiple Document Interface)