14.4 Menü einer MDI-Anwendung
Nach Ihrem bisherigen Wissen über Steuerelemente würden Sie die Positionierung und Anordnung von Menü-, Symbol- und Statusleiste einem ToolStripContainer überlassen. Vertrauen Sie diesem Steuerelement aber nicht zu sehr. Denn sobald Sie diesen Container in den Arbeitsbereich eines MDI-Hauptfensters gelegt haben, verliert das Hauptfenster seine für es typischen Eigenschaften hinsichtlich der Verwaltung und Anzeige der Subfenster. Unter anderem sind sie gar nicht mehr sichtbar. Sie müssen demnach auf einen ToolStripContainer im MDI-Hauptfenster verzichten und können nicht von dessen Fähigkeiten profitieren.
14.4.1 Subfenster anordnen
Haben Sie im MDI-Hauptfenster mehrere Subfenster geöffnet, werden diese standardmäßig überlappend angezeigt. Das erste öffnet sich in der linken oberen Ecke des Hauptfensters, jedes weitere um jeweils einen bestimmten Betrag nach rechts unten versetzt. Die Subfenster können noch auf zwei weitere Arten automatisch angeordnet werden: entweder neben- oder untereinander. Üblicherweise wird die Wahl über das Menü Fenster des Hauptfensters bereitgestellt, siehe Abbildung 14.2.
Abbildung 14.2 Auswahlmenü zur Anordnung der MDI-Subfenster
Im Ereignishandler des Click-Ereignisses der Menüelemente wird die Methode LayoutMdi des Hauptfensters aufgerufen, der Sie als Argument einen der insgesamt vier Konstanten der Enumeration MdiLayout übergeben (siehe Tabelle 14.1).
Konstante | Wert | Anordnung im MDI-Hauptfenster |
Cascade |
0 |
Subfenster werden überlappend angeordnet. |
TileHorizontal |
1 |
Subfenster werden horizontal angeordnet. |
TileVertical |
2 |
Subfenster werden vertikal angeordnet. |
ArrangeIcons |
3 |
Alle auf Icongröße reduzierten Subfenster werden am unteren Rand angeordnet. |
Ein gemeinsamer Ereignishandler reicht aus, um alle Subfenster wunschgemäß anzuordnen. Sie prüfen dann in einer If-Anweisung den Parameter sender, um festzustellen, welches Menüelement den Aufruf des Handlers ausgelöst hat. Mit der gewonnenen Information rufen Sie LayoutMdi mit dem entsprechenden Enumerationswert auf.
Private Sub Anordnung(ByVal sender As Object, ByVal e As EventArgs) _
Handles Überlappend.Click, Nebeneinander.Click, Untereinander.Click
If sender Is Überlappend Then
Me.LayoutMdi(MdiLayout.Cascade)
ElseIf sender Is Untereinander Then
Me.LayoutMdi(MdiLayout.TileHorizontal)
Else
Me.LayoutMdi(MdiLayout.TileVertical)
End If
End Sub
Die gewünschte Anordnung spezifiziert die Hauptausrichtung der Subfenster, die für den Fall vertikaler und horizontaler Ausrichtung die gesamte Clientfläche ohne Überlappung füllen. Es sind mehr Subfenster in der gewünschten Richtung vorhanden als in der anderen. Ein »Extremfall« tritt für vier Subfenster auf, in dem je zwei Fenster neben- und untereinander stehen – die vertikale und die horizontale Anordnung sind dann identisch.
14.4.2 Subfenster mit eigenen Menüs
Subfenster können genauso wie MDI-Hauptfenster eine eigene Menüleiste haben. Allerdings wird diese nicht im Sub-, sondern im Hauptfenster angezeigt. Dabei wird die Menüleiste des Hauptfensters um die Menüleiste des Subfensters ergänzt. Die Menüelemente in der kombinierten Menüleiste können unterschiedlich angeordnet werden. Standardmäßig wird die Menüleiste des Hauptfensters rechts um die Menüleiste des Subfensters ergänzt. Sie können die beiden Menüleisten aber auch beliebig kombinieren, Menüelemente ausblenden, Menüelemente im Hauptfenster durch Untermenüs des Subfensters ergänzen usw.
Die Eigenschaften MergeAction und MergeIndex in der Klasse ToolStripItem kontrollieren die Kombination der beiden Menüs aus Haupt- und Subfenster. Die Einstellungen dieser Eigenschaften wirken sich nur dann aus, wenn das MenuStrip-Objekt mit AllowMerge=True ein Zusammenführen erlaubt. Das ist die Standardeinstellung und muss nur umgeschaltet werden, wenn das Zusammenführen der Menüleisten unerwünscht ist.
MergeAction beschreibt, wie die beiden Menüleisten kombiniert werden. Dabei sind Einstellungen möglich, die in der gleichnamigen Enumeration festgelegt sind (siehe Tabelle 14.2).
Konstante | Beschreibung |
Append |
Das Menüelement wird an die Menüleiste im Hauptfenster angehängt. |
Insert |
Fügt ein Menüelement an der unter MergeIndex spezifizierten Position ein. |
MatchOnly |
Das Untermenü des Menüelements wird an dasjenige Untermenü im Hauptfenster angehängt, dessen Position durch MergeIndex beschrieben wird. |
Remove |
Das Menüelement ist in einem zusammengeführten Menü nicht enthalten. |
Replace |
Das unter MergeIndex angegebene Menüelement des Hauptfensters wird vollständig ersetzt. |
MergeAction.Append hängt das Menüelement direkt hinter das rechts außen stehenden Menüelement des Hauptfensters an. Diese Standardeinstellung der Eigenschaft MergeAction der Subfenster-Menüelemente spielt die komplette Subfenster-Menüleiste in die Menüleiste des Hauptfensters ein.
Mit MergeAction.Insert nehmen Sie Einfluss auf die angezeigte Reihenfolge. Sie geben in der Eigenschaft MergeIndex die Position des Menüelements in der zusammengeführten Menüleiste an. Bedenken Sie, dass alle Menüelemente von einer Auflistung des MenuStrip-Objekts verwaltet werden. Mit
MergeAction = MergeAction.Insert MergeIndex = 1
wird das Menüelement als zweites Element im zusammengeführten Menü des Hauptfensters angezeigt.
Angenommen, im Hauptfenstermenü gibt es ein Menüelement Datei und im Subfenster ebenfalls. Soll das Menüelement im Subfenster das Menüelement des Hauptfensters komplett ersetzen, spezifizieren Sie zuerst mit
MergeAction = MergeAction.Replace
dass ersetzt werden soll und unter MergeIndex die nullbasierte Position im Menü des Hauptfensters. Da Datei meist links außen zu finden ist und damit auch die erste Position in der ToolStripItemCollection einnimmt, ist die Position 0 meist richtig.
MergeIndex = 0
Alternativ können Sie das ursprüngliche Datei-Menü im Hauptfenster durch passende Einträge des Subfensters ergänzen, um den spezifischen Anforderungen des Subfensters zu genügen. Unter MergeIndex geben Sie dazu den Index des Menüelements an, das ergänzt werden soll, und MergeAction legen Sie auf MergeAction.MatchOnly fest. Es ist übrigens nicht erforderlich, dass die zusammengeführten Menüelemente denselben Bezeichner haben.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.