Erstellen von untergeordneten MDI-Formularen

Untergeordnete MDI-Formulare sind ein wesentliches Element von MDI-Anwendungen (Multiple Document Interface), weil diese Formulare den Mittelpunkt der Benutzerinteraktion darstellen.

Im folgenden Verfahren erstellen Sie mit Visual Studio ein untergeordnetes MDI-Formular, das ein RichTextBox-Steuerelement anzeigt, das den meisten Textverarbeitungsprogrammen ähnelt. Durch Ersetzen des System.Windows.Forms-Steuerelements durch andere Steuerelementen (z. B. das DataGridView-Steuerelement oder eine Kombination von Steuerelementen) können Sie untergeordnete MDI-Fenster (und durch Erweiterung auch MDI-Anwendungen) mit vielfältigen Möglichkeiten erstellen.

Erstellen von untergeordneten MDI-Formularen

  1. Erstellen eines neuen Windows Forms-Anwendungsprojekts mit Visual Studio Legen Sie im Fenster Eigenschaften für das Formular seine Eigenschaft IsMdiContainer auf true und die Eigenschaft WindowsState auf Maximized fest.

    Dies kennzeichnet das Formular als MDI-Container für untergeordnete Fenster.

  2. Ziehen Sie ein MenuStrip-Steuerelement aus der Toolbox in das Formular. Legen Sie seine Eigenschaft Text auf Datei fest.

  3. Klicken Sie auf die Auslassungspunkte (...) neben der Eigenschaft Elemente, und klicken Sie dann auf Hinzufügen, um zwei untergeordnete Menüelemente für die Toolleiste hinzuzufügen. Legen Sie die Eigenschaft Text für diese Elemente auf Neu und Fenster fest.

  4. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie dann Hinzufügen>Neues Element aus.

  5. Wählen Sie im neuen Dialogfeld Neues Element hinzufügen die Option Windows Form (in Visual Basic oder in Visual C#) oder Windows Forms-Anwendung (.NET) (in Visual C++) über den Bereich Vorlagen aus. Geben Sie dem Formular im Feld Name den Namen Form2. Wählen Sie Öffnen aus, um das Formular dem Projekt hinzuzufügen.

    Hinweis

    Das untergeordnete MDI-Formular, das Sie in diesem Schritt erstellten haben, ist ein Standard-Windows Form. Als solches besitzt es eine Eigenschaft Opacity, mit der Sie die Transparenz des Formulars steuern können. Allerdings wurde die Eigenschaft Opacity für Fenster der obersten Ebene entwickelt. Verwenden Sie sie nicht mit untergeordneten MDI-Formularen, da Darstellungsprobleme auftreten können.

    Dieses Formular wird die Vorlage für Ihre untergeordneten MDI-Formulare.

    Der Windows Forms-Designer wird geöffnet und zeigt Form2 an.

  6. Ziehen Sie ein RichTextBox-Steuerelement aus der Toolbox auf das Formular.

  7. Legen Sie im Fenster Eigenschaften die Eigenschaft Anchor auf Oben, Links und die Eigenschaft Dock auf Füllen fest.

    Dies bewirkt, dass das RichTextBox-Steuerelement den Bereich des untergeordneten MDI-Formulars selbst dann vollständig ausgefüllt, wenn die Größe des Formulars geändert wird.

  8. Doppelklicken Sie auf das Menüelement Neu, um einen Click-Ereignishandler zu erstellen.

  9. Fügen Sie Code ein, der dem folgenden ein Code ähnlich ist, um ein neues untergeordnetes MDI-Formular zu erstellen, wenn der Benutzer auf das Menüelement Neu klickt.

    Hinweis

    Im folgenden Beispiel verarbeitet der Ereignishandler das Click-Ereignis für MenuItem2. Beachten Sie, dass abhängig von den Gegebenheiten Ihrer Anwendungsarchitektur Ihr Menüelement Neu ggf. nicht MenuItem2 ist.

    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();
       }
    

    Fügen Sie in C++ die folgende #include-Anweisung am Anfang von „Form1.h“ hinzu:

    #include "Form2.h"
    
  10. Wählen Sie in der Dropdownliste oben im Fenster Eigenschaften die Menüleiste aus, die der Menüleiste Datei entspricht, und legen Sie die Eigenschaft MdiWindowListItem auf ToolStripMenuItem des Fensters fest.

    Auf diese Weise kann das Menü Fenster eine Liste der geöffneten untergeordneten MDI-Fenster mit einem Häkchen neben dem aktiven untergeordneten Fenster verwalten.

  11. Drücken Sie F5, um die Anwendung auszuführen. Durch Auswählen von Neu aus dem Menü Datei können Sie neue untergeordnete MDI-Formulare erstellen, die im Menüelement Fenster nachverfolgt werden.

    Hinweis

    Wenn ein untergeordnetes MDI-Formular eine Komponente MainMenu (in der Regel mit einer Menüstruktur aus Menüelementen) besitzt und innerhalb eines übergeordneten MDI-Formulars geöffnet wird, das eine Komponente MainMenu (in der Regel mit einer Menüstruktur aus Menüelementen) besitzt, werden die Menüelemente automatisch zusammengeführt, wenn Sie die Eigenschaft MergeType (und optional die Eigenschaft MergeOrder) festgelegt haben. Legen Sie die Eigenschaft MergeType -beider MainMenu-Komponenten sowie alle Menüelemente des untergeordneten Formulars auf MergeItems fest. Legen Sie außerdem die Eigenschaft MergeOrder so fest, dass die Menüelemente aus beiden Menüs in der gewünschten Reihenfolge angezeigt werden. Bedenken Sie außerdem, dass beim Schließen eines übergeordneten MDI-Formulars jedes untergeordnete MDI-Formular ein Ereignis Closing auslöst, bevor das Ereignis Closing für das übergeordnete MDI-Formular ausgelöst wird. Durch das Abbrechen des Closing-Ereignisses eines untergeordneten MDI-Formulars wird nicht verhindert, dass das Closing-Ereignis des übergeordneten MDI-Formulars ausgelöst wird. Allerdings ist das CancelEventArgs-Argument für das Closing-Ereignis des übergeordneten MDI-Formulars jetzt auf true festgelegt. Sie können erzwingen, dass das übergeordnete MDI-Element und alle untergeordneten MDI-Formulare geschlossen werden, indem Sie das CancelEventArgs-Argument auf false festlegen.

Weitere Informationen