C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■103770 / )  Re[1]: MDI子フォームの最大化時のウインドウキャプション
□投稿者/ 魔界の仮面弁士 (3861回)-(2025/07/11(Fri) 16:52:55)
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 にする必要も無いのですけれども。

返信 編集キー/


管理者用

- Child Tree -