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

フォームの位置と大きさを取得、変更する

ここでは、フォームの位置と大きさ(サイズ)を取得する方法と変更する方法について説明します。

Left、Top、Width、Heightプロパティを使用する

フォームのLeftプロパティTopプロパティを使用すると、フォームの位置を取得、設定することができます。Leftプロパティは画面左端からの距離(画面座標におけるX座標)、Topプロパティは画面上端からの距離(画面座標におけるY座標)を表します。

フォームのHeightプロパティWidthプロパティを使用すると、フォームの大きさを取得、設定することができます。Widthプロパティはフォームの幅、Heightプロパティはフォームの高さを表します。

以下に、フォーム(自分自身)の位置と大きさを取得、変更する例を示します。

VB.NET
コードを隠すコードを選択
'フォームの位置と大きさを表示する
Console.WriteLine("フォームX座標 = {0}", Me.Left)
Console.WriteLine("フォームY座標 = {0}", Me.Top)
Console.WriteLine("フォームの横幅 = {0}", Me.Width)
Console.WriteLine("フォームの高さ = {0}", Me.Height)

'フォームを一番左端に寄せる
Me.Left = 0
'フォームを10ピクセル下に移動させる
Me.Top += 10
'フォームの横幅を400ピクセルにする
Me.Width = 400
'フォームの高さを50ピクセル小さくする
Me.Height -= 50
C#
コードを隠すコードを選択
//フォームの位置と大きさを表示する
Console.WriteLine("フォームX座標 = {0}", this.Left);
Console.WriteLine("フォームY座標 = {0}", this.Top);
Console.WriteLine("フォームの横幅 = {0}", this.Width);
Console.WriteLine("フォームの高さ = {0}", this.Height);

//フォームを一番左端に寄せる
this.Left = 0;
//フォームを10ピクセル下に移動させる
this.Top += 10;
//フォームの横幅を400ピクセルにする
this.Width = 400;
//フォームの高さを50ピクセル小さくする
this.Height -= 50;

Location、Size、Boundsプロパティを使用する

フォームの位置を、XとY座標同時に取得、設定するには、フォームのLocationプロパティを使用します。

また、フォームの大きさを、幅と高さ同時に取得、設定するには、フォームのSizeプロパティを使用します。

さらに、フォームの位置と大きさを同時に取得、設定するには、フォームのBoundsプロパティを使用します。

これらのプロパティを使用した場合と、先に紹介したLeft、Top、Width、Heightプロパティを使用した場合とでは、結果的に違いはありません。ただし、同時に値を取得、設定するのでなければ、多くの場合でLeft、Top、Width、Heightプロパティを使用した方が効率的です。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing

'フォームの位置と大きさを表示する
Console.WriteLine("フォームX座標 = {0}", Me.Location.X)
Console.WriteLine("フォームY座標 = {0}", Me.Location.Y)
Console.WriteLine("フォームの横幅 = {0}", Me.Size.Width)
Console.WriteLine("フォームの高さ = {0}", Me.Size.Height)

Console.WriteLine("フォームX座標 = {0}", Me.Bounds.X)
Console.WriteLine("フォームY座標 = {0}", Me.Bounds.Y)
Console.WriteLine("フォームの横幅 = {0}", Me.Bounds.Width)
Console.WriteLine("フォームの高さ = {0}", Me.Bounds.Height)

'フォームを (10, 20) の位置に移動する
Me.Location = New Point(10, 20)
'フォームの大きさを 200 x 100 にする
Me.Size = New Size(200, 100)
'フォームを (10, 20) に移動し、大きさを 200 x 100 にする
Me.Bounds = New Rectangle(10, 20, 200, 100)
C#
コードを隠すコードを選択
//using System.Drawing;

//フォームの位置と大きさを表示する
Console.WriteLine("フォームX座標 = {0}", this.Location.X);
Console.WriteLine("フォームY座標 = {0}", this.Location.Y);
Console.WriteLine("フォームの横幅 = {0}", this.Size.Width);
Console.WriteLine("フォームの高さ = {0}", this.Size.Height);

Console.WriteLine("フォームX座標 = {0}", this.Bounds.X);
Console.WriteLine("フォームY座標 = {0}", this.Bounds.Y);
Console.WriteLine("フォームの横幅 = {0}", this.Bounds.Width);
Console.WriteLine("フォームの高さ = {0}", this.Bounds.Height);

//フォームを (10, 20) の位置に移動する
this.Location = new Point(10, 20);
//フォームの大きさを 200 x 100 にする
this.Size = new Size(200, 100);
//フォームを (10, 20) に移動し、大きさを 200 x 100 にする
this.Bounds = new Rectangle(10, 20, 200, 100);

フォームの位置とサイズを変更する

SetBoundsメソッドを使用すると、フォームの位置と大きさを、個別あるいは同時に変更することができます。

今まで紹介してきた方法はどれも内部でSetBoundsメソッドを呼び出していますので、フォームの位置やサイズを設定する場合は、SetBoundsメソッドを直接呼び出した方が効率的です。

VB.NET
コードを隠すコードを選択
'Imports System.Windows.Forms

'フォームの位置を(10, 50)、大きさを 200x100 に変更する
'(この場合は、BoundsSpecifiedを省略可能)
Me.SetBounds(10, 50, 200, 100, BoundsSpecified.All)
'フォームの位置だけを変更する
Me.SetBounds(10, 50, 200, 100, BoundsSpecified.Location)
'フォームの大きさだけを変更する
Me.SetBounds(10, 50, 200, 100, BoundsSpecified.Size)
'フォームの幅だけを変更する
Me.SetBounds(10, 50, 200, 100, BoundsSpecified.Width)
'フォームの高さだけを変更する
Me.SetBounds(10, 50, 200, 100, BoundsSpecified.Height)
'フォームのX座標だけを変更する
Me.SetBounds(10, 50, 200, 100, BoundsSpecified.X)
'フォームのY座標だけを変更する
Me.SetBounds(10, 50, 200, 100, BoundsSpecified.Y)
'変更しない
Me.SetBounds(10, 50, 200, 100, BoundsSpecified.None)
C#
コードを隠すコードを選択
//using System.Windows.Forms;

//フォームの位置を(10, 50)、大きさを 200x100 に変更する
//(この場合は、BoundsSpecifiedを省略可能)
this.SetBounds(10, 50, 200, 100, BoundsSpecified.All);
//フォームの位置だけを変更する
this.SetBounds(10, 50, 200, 100, BoundsSpecified.Location);
//フォームの大きさだけを変更する
this.SetBounds(10, 50, 200, 100, BoundsSpecified.Size);
//フォームの幅だけを変更する
this.SetBounds(10, 50, 200, 100, BoundsSpecified.Width);
//フォームの高さだけを変更する
this.SetBounds(10, 50, 200, 100, BoundsSpecified.Height);
//フォームのX座標だけを変更する
this.SetBounds(10, 50, 200, 100, BoundsSpecified.X);
//フォームのY座標だけを変更する
this.SetBounds(10, 50, 200, 100, BoundsSpecified.Y);
//変更しない
this.SetBounds(10, 50, 200, 100, BoundsSpecified.None);

フォームの位置と大きさをデスクトップ座標で取得、変更する

Locationプロパティは画面上の座標(画面座標)で位置を取得、設定しますが、DesktopLocationプロパティを使用すると、デスクトップ座標(タスクバーを除外した画面の作業領域に基づいた座標)で位置を取得、設定することができます。タスクバーが画面の上や左にある時に役に立ちます。

また、位置を設定するだけならば、SetDesktopLocationメソッドを使用することもできます。DesktopLocationプロパティは内部でSetDesktopLocationメソッドを呼び出していますので、位置を設定する時はSetDesktopLocationメソッドを使用した方が効率的です。

同様に、フォームのDesktopBoundsプロパティを使うと、フォームの位置と大きさをデスクトップ座標で取得、設定することができます。また、設定だけならば、SetDesktopBoundsメソッドを使って行うこともできます。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing

'フォームの位置をデスクトップ座標で取得する
Console.WriteLine(Me.DesktopLocation)
'フォームをデスクトップ座標 (10, 50) に移動する
Me.DesktopLocation = New Point(10, 50)
'次のようにしても同じ
Me.SetDesktopLocation(10, 50)

'フォームの位置と大きさをデスクトップ座標で取得する
Console.WriteLine(Me.DesktopBounds)
'フォームをデスクトップ座標 (10, 50) に移動し、
' 大きさを 200x100 にする
Me.DesktopBounds = New Rectangle(10, 50, 200, 100)
'次のようにしても同じ
Me.SetDesktopBounds(10, 50, 200, 100)
C#
コードを隠すコードを選択
//using System.Drawing;

//フォームの位置をデスクトップ座標で取得する
Console.WriteLine(this.DesktopLocation);
//フォームをデスクトップ座標 (10, 50) に移動する
this.DesktopLocation = new Point(10, 50);
//次のようにしても同じ
this.SetDesktopLocation(10, 50);

//フォームの位置と大きさをデスクトップ座標で取得する
Console.WriteLine(this.DesktopBounds);
//フォームをデスクトップ座標 (10, 50) に移動し、
// 大きさを 200x100 にする
this.DesktopBounds = new Rectangle(10, 50, 200, 100);
//次のようにしても同じ
this.SetDesktopBounds(10, 50, 200, 100);
補足:これらの方法でフォームが指定したサイズにならない時は、「フォームのサイズを制限する」で紹介しているフォームのMinimumSize、MaximumSizeプロパティを確認してください。また、フォームのサイズがデスクトップ以上にならない問題に関しては、「フォームのサイズをMaxWindowTrackSize(デスクトップ)以上にする」をご覧ください。
  • 履歴:
  • 2013/6/13 一部のサンプルを書き直す。
  • 2015/4/27 フォームの位置と大きさを取得する方法を追加し、全面的に書き直す。

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

  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。