DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

MDI親フォームのクライアント領域の大きさを取得する

例えば、MDI親フォームのクライアント領域いっぱいに子フォームを広げたい時などに、親フォームのクライアント領域の大きさが必要になります。これは親フォームのClientRectangleプロパティで分かりそうですが、実際に親フォームのClientRectangleの大きさを子フォームの大きさに設定すると大きすぎるようで、スクロールバーが表示されてしまいます。

実際の親フォームのクライアント領域の大きさを取得するには、「MDI親フォームの背景色を変更する」で紹介したMdiClientコントロールのClientRectangleプロパティを使います。

注意:ただし、.NET Framework 1.1以前のヘルプによると、MdiClientクラスは「独自に作成したコード内で直接使用することはできません。」とありますので、この方法が適切であるかは保障できません。.NET Framework 2.0からは、このような文言はなくなりました。
VB.NET
コードを隠すコードを選択
Private Sub MenuItem1_Click( _
    ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles MenuItem1.Click
    'MdiClientの取得
    Dim mc As System.Windows.Forms.MdiClient = GetMdiClient(Me)

    '親フォームのクライアント領域の大きさを表示する
    Console.WriteLine(mc.ClientRectangle)
End Sub

''' <summary>
''' フォームのMdiClientコントロールを探して返す
''' </summary>
''' <param name="f">MdiClientコントロールを探すフォーム</param>
''' <returns>見つかったMdiClientコントロール</returns>
Public Shared Function GetMdiClient( _
    ByVal f As System.Windows.Forms.Form) _
    As System.Windows.Forms.MdiClient
    Dim c As System.Windows.Forms.Control
    For Each c In f.Controls
        If TypeOf c Is System.Windows.Forms.MdiClient Then
            Return CType(c, System.Windows.Forms.MdiClient)
        End If
    Next c
    Return Nothing
End Function
C#
コードを隠すコードを選択
private void MenuItem1_Click(object sender, System.EventArgs e)
{
    //MdiClientの取得
    System.Windows.Forms.MdiClient mc = GetMdiClient(this);

    //親フォームのクライアント領域の大きさを表示する
    Console.WriteLine(mc.ClientRectangle);
}

/// <summary>
/// フォームのMdiClientコントロールを探して返す
/// </summary>
/// <param name="f">MdiClientコントロールを探すフォーム</param>
/// <returns>見つかったMdiClientコントロール</returns>
public static System.Windows.Forms.MdiClient 
    GetMdiClient(System.Windows.Forms.Form f)
{
    foreach (System.Windows.Forms.Control c in f.Controls)
        if (c is System.Windows.Forms.MdiClient)
            return (System.Windows.Forms.MdiClient) c;
    return null;
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。