MDI親フォームのクライアント領域の大きさ(幅、高さ)を取得する
MDI親フォームのクライアント領域の大きさを取得する場合は、MdiClientコントロールのClientRectangleプロパティの値を参照します。
UI
以下のUIを準備します。
FormMain
IsMdiContainerプロパティをTrueに設定します。
FormInfo
テキストボックスのmodifiyプロパティをpublicに設定します。
コード
以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace MDIParentFormSize
{
public partial class FormMain : Form
{
System.Windows.Forms.MdiClient mc;
FormInfo fi;
public FormMain()
{
InitializeComponent();
}
private void FormMain_Load(object sender, EventArgs e)
{
fi = new FormInfo();
fi.MdiParent = this;
fi.Show();
foreach (System.Windows.Forms.Control c in Controls) {
if (c is System.Windows.Forms.MdiClient) {
mc = (System.Windows.Forms.MdiClient)c;
mc.Resize += new EventHandler(MDIClient_Resize);
}
}
}
private void MDIClient_Resize(object sender, EventArgs e)
{
if (mc != null) {
fi.textBox1.Text += string.Format("{0:d},{1:d}\r\n",
mc.Width, mc.Height);
fi.textBox1.Text += string.Format("{0:d},{1:d}\r\n",
mc.ClientRectangle.Width, mc.ClientRectangle.Height);
}
}
}
}
解説
private void FormMain_Load(object sender, EventArgs e)
{
fi = new FormInfo();
fi.MdiParent = this;
fi.Show();
foreach (System.Windows.Forms.Control c in Controls) {
if (c is System.Windows.Forms.MdiClient) {
mc = (System.Windows.Forms.MdiClient)c;
mc.Resize += new EventHandler(MDIClient_Resize);
}
}
}
情報表示のMDI子フォームを表示します。また、MdiClientコントロールを取得し、Resize イベントハンドラを設定します。
private void MDIClient_Resize(object sender, EventArgs e)
{
if (mc != null) {
fi.textBox1.Text += string.Format("{0:d},{1:d}\r\n",
mc.Width, mc.Height);
fi.textBox1.Text += string.Format("{0:d},{1:d}\r\n",
mc.ClientRectangle.Width, mc.ClientRectangle.Height);
}
}
MDI親フォームがリサイズされた際に、MdiClientのWidth,Heightプロパティを参照し幅と高さをテキストボックスに表示します。また、ClientRectangleプロパティも参照しクライアント領域の幅と高さもテキストボックスに表示します。
実行結果
プロジェクトを実行します。MDI親フォームの幅と高さ、クライアント領域の幅と高さが表示されます。
MDI親フォームをリサイズすると、サイズ更新後の幅と高さ、クライアント領域の幅と高さがテキストボックスに表示されます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用