C#でWindowsフォームアプリケーションのフォームのクライアント領域を取得、設定する方法を紹介します。
フォームのクライアント領域を取得、設定するには、System.Windows.Forms名前空間にあるFormクラスのClientSizeプロパティを使用します。
本記事ではVisual Studioで作成した、Windowsフォームアプリケーションのプロジェクトに記述するコードを記載します。
Windowsフォームアプリケーションのプロジェクトを作成する方法については、以下の記事を参照してください。
目次
フォームのクライアント領域を取得する
ClientSizeプロパティはフォームのクライアント領域のサイズをSystem.Drawing名前空間のSize構造体で返します。
1 2 3 4 5 6 7 8 9 10 11 12 |
// フォームのインスタンスを生成 Form form = new Form(); // クライアント領域を取得 Size size = form.ClientSize; // 幅を取得 int width = size.Width; // 高さを取得 int height = size.Height; // フォームを表示 form.Show(); Console.WriteLine($"幅: {width} 高さ: {height}"); |
ClientSize構造体のWidthはフォームのクライアント領域の幅、Heightはフォームのクライアント領域の高さになります。(全体の幅、高さにはボーダー(境界線)やタイトルバーのサイズを含みます。)
上記の例では、Size構造体を変数に取得してからWidthとHeightを取得しましたが、直接取得することもできます。
1 2 3 4 5 6 7 8 9 10 |
// フォームのインスタンスを生成 Form form = new Form(); // 幅を取得 int width = form.ClientSize.Width; // 高さを取得 int height = form.ClientSize.Height; // フォームを表示 form.Show(); Console.WriteLine($"幅: {width} 高さ: {height}"); |
フォームのクライアント領域を設定する
フォームのクライアント領域はコードで設定することができます。(フォームデザイナーのプロパティグリッドでは設定できません。)
コードで設定する
コードエディタを表示して以下のコードを入力します。
1 2 3 4 5 6 7 8 |
// フォームのインスタンスを生成 Form form = new Form(); // クライアント領域のサイズを定義 Size size = new Size(800, 600); // フォームのクライアント領域を設定 form.ClientSize = size; // フォームを表示 form.Show(); |
フォームのクライアント領域のサイズは、境界とタイトルバーを除いたフォームのサイズになります。 フォーム内のコントロールを配置できる領域が、フォームのクライアント領域(ClientSize)になります。 ClientSizeプロパティを使用すると、グラフィックス操作の実行時や、フォーム上のコントロールのサイズ変更や配置を行う時に、適切な寸法が取得できます。
フォーム全体のサイズを取得するにはSizeプロパティを使用するか、幅と高さのプロパティWidthとHeightを使用します。
サンプルプログラム
ここではフォームのClientSizeプロパティでクライアント領域のサイズを指定してフォームを作成し、フォームのSizeプロパティで全体のサイズを取得して、クライアント領域のサイズと全体のサイズの差異からフォームの境界線(ボーダー)の幅とタイトルバーの高さを取得するサンプルプログラムを作成します。
ユーザーインターフェース
フォームには、境界線(ボーダー)とタイトルバーのサイズを取得して表示するボタン(button1)と、サイズを表示するラベル(label1とlabel2)を配置します。
ソースコード
ボタン(button1)がクリックされた時に境界線(ボーダー)とタイトルバーのサイズを取得して表示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
using System; using System.Drawing; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { // コンストラクタ public Form1() { InitializeComponent(); } // 境界線とタイトルバーのサイズを表示 private void button1_Click(object sender, EventArgs e) { try { // フォームのインスタンスを生成 Form form = new Form(); // クライアント領域のサイズを定義 Size clientSize = new Size(400, 300); // フォームのクライアント領域を設定 form.ClientSize = clientSize; // フォームの全体のサイズを取得 Size size = form.Size; // 差異を取得 int width = size.Width - clientSize.Width; int height = size.Height - clientSize.Height; // 境界線(ボーダー)の幅を取得 int borderWidth = width / 2; // タイトルバーの高さを取得 int titlebarHeight = height - width; label1.Text = $"境界線: {borderWidth}"; label2.Text = $"タイトルバー: {titlebarHeight}"; // フォームのクライアント領域いっぱいに広がるボタンを配置 Button button = new Button(); form.Controls.Add(button); button.Location = new Point(0, 0); button.Size = clientSize; button.Text = "クライアント領域サイズのボタン"; button.Click += Button_Click; // フォームを表示 form.ShowDialog(this); } catch (Exception ex) { MessageBox.Show(ex.Message); } } // ボタンのサイズ(クライアント領域)を表示 private void Button_Click(object sender, EventArgs e) { try { // ボタンのサイズを表示 MessageBox.Show(((Button)sender).Size.ToString()); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } } |
プログラムの実行
プロジェクトをビルドして実行(デバッグ)します。
button1をクリックします。
フォームの境界線(ボーダー)の幅とタイトルバーの高さが表示されます。
button1をクリックすると作成したフォームが表示されます。
表示されるフォームにはクライアント領域いっぱいに配置されたボタンがありますのでクリックします。
ボタンのサイズ(フォームのクライアントサイズ)がメッセージボックスで表示されます。