例えば、MDI親フォームのクライアント領域いっぱいに子フォームを広げたい時などに、親フォームのクライアント領域の大きさが必要になります。これは親フォームのClientRectangleプロパティで分かりそうですが、実際に親フォームのClientRectangleの大きさを子フォームの大きさに設定すると大きすぎるようで、スクロールバーが表示されてしまいます。
実際の親フォームのクライアント領域の大きさを取得するには、「MDI親フォームの背景色を変更する」で紹介したMdiClientコントロールのClientRectangleプロパティを使います。
注意:ただし、.NET Framework 1.1以前のヘルプによると、MdiClientクラスは「独自に作成したコード内で直接使用することはできません。」とありますので、この方法が適切であるかは保障できません。.NET Framework 2.0からは、このような文言はなくなりました。
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
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; }
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。