ここでは、フォームの位置と大きさ(サイズ)を取得する方法と変更する方法について説明します。
フォームのLeftプロパティとTopプロパティを使用すると、フォームの位置を取得、設定することができます。Leftプロパティは画面左端からの距離(画面座標におけるX座標)、Topプロパティは画面上端からの距離(画面座標におけるY座標)を表します。
フォームのHeightプロパティとWidthプロパティを使用すると、フォームの大きさを取得、設定することができます。Widthプロパティはフォームの幅、Heightプロパティはフォームの高さを表します。
以下に、フォーム(自分自身)の位置と大きさを取得、変更する例を示します。
'フォームの位置と大きさを表示する 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
//フォームの位置と大きさを表示する 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;
フォームの位置を、XとY座標同時に取得、設定するには、フォームのLocationプロパティを使用します。
また、フォームの大きさを、幅と高さ同時に取得、設定するには、フォームのSizeプロパティを使用します。
さらに、フォームの位置と大きさを同時に取得、設定するには、フォームのBoundsプロパティを使用します。
これらのプロパティを使用した場合と、先に紹介したLeft、Top、Width、Heightプロパティを使用した場合とでは、結果的に違いはありません。ただし、同時に値を取得、設定するのでなければ、多くの場合でLeft、Top、Width、Heightプロパティを使用した方が効率的です。
'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)
//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メソッドを直接呼び出した方が効率的です。
'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)
//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メソッドを使って行うこともできます。
'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)
//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(デスクトップ)以上にする」をご覧ください。