2 Toolstrips in einem MDI Form?

11/08/2008 - 18:41 von Markus Sch. | Report spam
Hallo,

ich habe ein MDI Form, ein MenuStrip, ein ToolStrip und darunter einen
SplitContainer mit 2 Forms. Nun wollte ich einen zweiten Toolstrip hinzufügen.
Ich habe das im Designer gemacht. Dies führte dazu das die Forms im
SplitContainer durch den zweiten Toolstrip verborgen waren. In der Hilfe fand
ich die Toolstrippanel Klasse. Auf den ersten Blick erscheint sie zu erlauben
2 Toolstrips in einem MDI Form unterzubringen.

Doch der Code den ich im Load Event des MDI Forms schrieb erscheint mir
etwas umstàndlich. Denn Menu Strips und ToolStrips wurden ja im Designer
erstellt.

Frage: Gibt es eine bessere, einfachere und elegantere Möglichkeit 2
Toolstrips in einem Form unterzubringen?

Der Code im MDI Form Laod Event:

' Create ToolStripPanel controls.
Dim tspTop As New ToolStripPanel()

' Dock the ToolStripPanel controls to the edges of the form.
tspTop.Dock = DockStyle.Top

Me.Controls.Remove(Me.MenuStrip1)
Me.Controls.Remove(Me.ToolStrip_Navigate)
Me.Controls.Remove(Me.ToolStripMain_Actions)

tspTop.Join(Me.ToolStrip_Navigate)
tspTop.Join(Me.ToolStripMain_Actions)
Me.Controls.Add(tspTop)

' Add the MenuStrip last.
' This is important for correct placement in the z-order.
Me.Controls.Add(Me.MenuStrip1)

Danke,
Markus
 

Lesen sie die antworten

#1 Peter Götz
11/08/2008 - 20:47 | Warnen spam
Hallo Markus,

ich habe ein MDI Form, ein MenuStrip, ein ToolStrip und
darunter einen SplitContainer mit 2 Forms.



Bei 2 Forms vermute ich mal je eine in SplitPanel1
und eine in SplitPanel2.

Nun wollte ich einen zweiten Toolstrip hinzufügen.
Ich habe das im Designer gemacht. Dies führte dazu
das die Forms im SplitContainer durch den zweiten
Toolstrip verborgen waren.



Tatsàchlich war wohl ein Teil Deines SplitContainers
von einem oder beiden ToolStrips verdeckt.

In der Hilfe fand ich die Toolstrippanel Klasse. Auf den
ersten Blick erscheint sie zu erlauben
2 Toolstrips in einem MDI Form unterzubringen.



Das geht auch ohne ToolStripPanel.


Doch der Code den ich im Load Event des MDI Forms
schrieb erscheint mir etwas umstàndlich. Denn Menu
Strips und ToolStrips wurden ja im Designer erstellt.



Hier mal ein Beispiel mit einer MDI-Form frmMDI.vb mit
2 Toolstrips mit je einem DateiMenü und darunter einem
SplitContainer in dessen SplitPanels jeweils eine Form
(Form1 u. Form2) liegt.

' /// Code in einer leeren Form (frmMDI.vb)
Public Class frmMDI

Private TSa As ToolStrip
Private TSMIa As ToolStripMenuItem
Private WithEvents mnuAShow As ToolStripMenuItem
Private WithEvents mnuAHide As ToolStripMenuItem

Private TSb As ToolStrip
Private TSMIb As ToolStripMenuItem
Private WithEvents mnuBShow As ToolStripMenuItem
Private WithEvents mnuBHide As ToolStripMenuItem

Private WithEvents VSplit As SplitContainer

Private WithEvents Form1 As Form
Private WithEvents Form2 As Form


Private Sub Form1_Load _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.Load

Me.IsMdiContainer = True
Me.Name = "frmMDI"
Me.Text = Me.Name
CreateObjects()
Me.Size = New Size(600, 500)

Form1 = New Form
With Form1
.Visible = False
.Name = "Form1"
.Text = .Name
.MdiParent = Me
.Parent = VSplit.Panel1
.Size = New Size(200, 300)
.BackColor = Color.Yellow
.ControlBox = False
End With

Form2 = New Form
With Form2
.Visible = False
.Name = "Form2"
.Text = .Name
.MdiParent = Me
.Parent = VSplit.Panel2
.Size = New Size(200, 300)
.BackColor = Color.Green
.ControlBox = False
End With

VSplit.SplitterDistance = VSplit.Width \ 2

mnuAShow.PerformClick()
mnuBShow.PerformClick()

End Sub

Private Sub CreateObjects()

TSa = New ToolStrip
TSb = New ToolStrip

With TSa
.Dock = DockStyle.Top
.GripStyle = ToolStripGripStyle.Visible

TSMIa = New ToolStripMenuItem("Datei A")
mnuAShow = New ToolStripMenuItem("show Form1")
mnuAHide = New ToolStripMenuItem("hide Form1")
mnuAHide.Enabled = False
TSMIa.DropDownItems.Add(mnuAShow)
TSMIa.DropDownItems.Add(mnuAHide)
.Items.Add(TSMIa)

End With

With TSb
.Dock = DockStyle.Top
.GripStyle = ToolStripGripStyle.Visible

TSMIb = New ToolStripMenuItem("Datei B")
mnuBShow = New ToolStripMenuItem("show Form2")
mnuBHide = New ToolStripMenuItem("hide Form2")
mnuBHide.Enabled = False
TSMIb.DropDownItems.Add(mnuBShow)
TSMIb.DropDownItems.Add(mnuBHide)
.Items.Add(TSMIb)
End With
Me.Controls.AddRange(New Control() {TSb, TSa})


VSplit = New SplitContainer
With VSplit
.Orientation = Orientation.Vertical
.Height = Me.ClientSize.Height - TSb.Bottom
.Dock = DockStyle.Bottom
.Parent = Me
.BorderStyle = BorderStyle.Fixed3D
End With
Me.Controls.Add(VSplit)

End Sub

Private Sub Form1_Resize _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.Resize

VSplit.Height = Me.ClientSize.Height - TSb.Bottom

End Sub

Private Sub mnuAShow_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mnuAShow.Click

Form1.Show()
End Sub

Private Sub mnuAHide_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mnuAHide.Click

Form1.Hide()

End Sub

Private Sub mnuBHide_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mnuBHide.Click

Form2.Hide()
End Sub

Private Sub mnuBShow_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mnuBShow.Click

Form2.Show()
End Sub

Private Sub Form1_VisibleChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Form1.VisibleChanged

mnuAShow.Enabled = Not Form1.Visible
mnuAHide.Enabled = Not mnuAShow.Enabled
End Sub

Private Sub Form2_VisibleChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Form2.VisibleChanged

mnuBShow.Enabled = Not Form2.Visible
mnuBHide.Enabled = Not mnuBShow.Enabled
End Sub
End Class
' \\\ E N T E

Programm starten und danch die beiden Menüs
"Datei A" und "Datei B" öffnen und

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen