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

フォームを画面の真ん中(あるいは、任意の位置)に表示する

フォームをShowやShowDialogメソッドで表示すると、デフォルトでは、フォームはWindowsによって決められた位置に表示されます。ここでは、フォームを画面の中央や、指定した位置等に表示する方法を紹介します。

画面の中央に表示する

フォームがはじめに表示される時、画面の真ん中に表示されるようにするには、フォームのStartPositionプロパティをFormStartPosition.CenterScreenにしてから、フォームを表示します。

以下の例では、Form2を画面の真ん中に表示しています。

VB.NET
コードを隠すコードを選択
'表示させるフォームを作成する
Dim f As New Form2()
'フォームを画面の真ん中に表示する
f.StartPosition = FormStartPosition.CenterScreen
f.Show()
C#
コードを隠すコードを選択
//表示させるフォームを作成する
Form2 f = new Form2();
//フォームを画面の真ん中に表示する
f.StartPosition = FormStartPosition.CenterScreen;
f.Show();

任意の位置に表示する

フォームを指定した位置に表示するには、フォームのLeft、Top、Locationなどのプロパティで表示位置を指定して、さらにStartPositionプロパティをManualにします。Visual Studioのフォームデザイナを使用する場合も、フォームのLocationプロパティに表示位置を入力し、かつStartPositionプロパティをManualにする必要があります。

以下の例では、Form2を画面左から100、上から200の位置に表示しています。

VB.NET
コードを隠すコードを選択
'表示させるフォームを作成する
Dim f As New Form2()
'フォームを(100, 200)の位置に表示する
f.Left = 100
f.Top = 200
f.StartPosition = FormStartPosition.Manual
f.Show()
C#
コードを隠すコードを選択
//表示させるフォームを作成する
Form2 f = new Form2();
//フォームを(100, 200)の位置に表示する
f.Left = 100;
f.Top = 200;
f.StartPosition = FormStartPosition.Manual;
f.Show();

モーダルフォームを親フォームの真ん中に表示する

ShowDialogメソッドでモーダルフォームを表示させた時や、MDIの子フォームを表示させた時、親フォームの真ん中に表示させるには、StartPositionプロパティをCenterParentにします。

VB.NET
コードを隠すコードを選択
Dim f As New Form2()
'フォームを親フォームの真ん中に表示する
f.StartPosition = FormStartPosition.CenterParent
f.ShowDialog(Me)
f.Dispose()
C#
コードを隠すコードを選択
Form2 f = new Form2();
//フォームを親フォームの真ん中に表示する
f.StartPosition = FormStartPosition.CenterParent;
f.ShowDialog(this);
f.Dispose();

モードレスフォームを親フォームの真ん中に表示する

モードレスのフォームが、あるフォームの背後に隠れないようにする」で紹介しているようなモードレスフォームの場合は、上記の方法で親フォームの中央に表示することができません。モードレスフォームを親フォームの中央に表示するには、表示位置を自分で計算して、前述した「任意の位置に表示する」方法を使って表示する必要があります。

または、例えばForm2のLoadイベントハンドラに次のようなコードを書き、Form2の親フォームを指定してからShowメソッドでフォームを表示すると、Form2は親フォームの中央に表示されるようになります。

VB.NET
コードを隠すコードを選択
'フォームのLoadイベントハンドラ
Private Sub Form2_Load(ByVal sender As Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
    Me.Location = New Point( _
        Me.Owner.Location.X + (Me.Owner.Width - Me.Width) \ 2, _
        Me.Owner.Location.Y + (Me.Owner.Height - Me.Height) \ 2)
End Sub
C#
コードを隠すコードを選択
//フォームのLoadイベントハンドラ
private void Form2_Load(object sender, System.EventArgs e)
{
    this.Location = new Point(
        this.Owner.Location.X + (this.Owner.Width - this.Width) / 2,
        this.Owner.Location.Y + (this.Owner.Height - this.Height) / 2);
}
  • 履歴:
  • 2015/6/15 任意の位置に表示する方法を追加、タイトルを変更など。

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

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。