|
■No103769 (まりもん さん) に返信 > MDI親フォームにPanelを配置しDock.Leftで左寄せで表示しているのですが > MDI子フォームを表示し、そのフォームを最大化するとウインドウキャプションが親ウインドウの幅全体で表示され左側に配置したパネルがキャプション分下に下がってしまいます。 そういうものですね。
仮に 子フォームが FormBorderStyle.None であったとしても、 子フォームが最大化されれば同様の動作になります。
> 最大化した子フォームのウインドウキャプションをMdiClientの領域のみに表示することは可能なのでしょうか? MDI であることに拘りが無いのなら、Left パネルの隣に Dock = Fill BackColor = AppWorkspace BorderStyle = Fixed3D なパネルを置いて、それを元の MdiClient 代わりにするのはどうでしょうか。
C# か VB か分からなかったので、とりあえず VB で書いてみました。
'Form1: MDI親フォーム Public Class Form1
Private WithEvents mdiClient As MdiClient Protected Overrides Sub OnLoad(e As EventArgs) mdiClient = Controls.OfType(Of MdiClient).FirstOrDefault() MyBase.OnLoad(e) End Sub
Private Sub mdiClient_ControlAdded(sender As Object, e As ControlEventArgs) Handles mdiClient.ControlAdded Dim child = TryCast(e.Control, Form) If child IsNot Nothing Then child.MdiParent = Nothing child.TopLevel = False child.Parent = Me.Panel2 '右側の Dock パネル End If End Sub
Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown 'Form2: MDI 子フォーム Dim c As New Form2() With {.MdiParent = Me} c.Show() End Sub End Class
この場合、MdiClient が Panel で覆われていることから、 実質的に MDI としての役割を果たせないので、 実際には IsMdiContainer を True にする必要も無いのですけれども。
|