フォームをShowやShowDialogメソッドで表示すると、デフォルトでは、フォームはWindowsによって決められた位置に表示されます。ここでは、フォームを画面の中央や、指定した位置等に表示する方法を紹介します。
フォームがはじめに表示される時、画面の真ん中に表示されるようにするには、フォームのStartPositionプロパティをFormStartPosition.CenterScreenにしてから、フォームを表示します。
以下の例では、Form2を画面の真ん中に表示しています。
'表示させるフォームを作成する Dim f As New Form2() 'フォームを画面の真ん中に表示する f.StartPosition = FormStartPosition.CenterScreen f.Show()
//表示させるフォームを作成する Form2 f = new Form2(); //フォームを画面の真ん中に表示する f.StartPosition = FormStartPosition.CenterScreen; f.Show();
フォームを指定した位置に表示するには、フォームのLeft、Top、Locationなどのプロパティで表示位置を指定して、さらにStartPositionプロパティをManualにします。Visual Studioのフォームデザイナを使用する場合も、フォームのLocationプロパティに表示位置を入力し、かつStartPositionプロパティをManualにする必要があります。
以下の例では、Form2を画面左から100、上から200の位置に表示しています。
'表示させるフォームを作成する Dim f As New Form2() 'フォームを(100, 200)の位置に表示する f.Left = 100 f.Top = 200 f.StartPosition = FormStartPosition.Manual f.Show()
//表示させるフォームを作成する Form2 f = new Form2(); //フォームを(100, 200)の位置に表示する f.Left = 100; f.Top = 200; f.StartPosition = FormStartPosition.Manual; f.Show();
ShowDialogメソッドでモーダルフォームを表示させた時や、MDIの子フォームを表示させた時、親フォームの真ん中に表示させるには、StartPositionプロパティをCenterParentにします。
Dim f As New Form2() 'フォームを親フォームの真ん中に表示する f.StartPosition = FormStartPosition.CenterParent f.ShowDialog(Me) f.Dispose()
Form2 f = new Form2(); //フォームを親フォームの真ん中に表示する f.StartPosition = FormStartPosition.CenterParent; f.ShowDialog(this); f.Dispose();
「モードレスのフォームが、あるフォームの背後に隠れないようにする」で紹介しているようなモードレスフォームの場合は、上記の方法で親フォームの中央に表示することができません。モードレスフォームを親フォームの中央に表示するには、表示位置を自分で計算して、前述した「任意の位置に表示する」方法を使って表示する必要があります。
または、例えばForm2のLoadイベントハンドラに次のようなコードを書き、Form2の親フォームを指定してからShowメソッドでフォームを表示すると、Form2は親フォームの中央に表示されるようになります。
'フォームの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
//フォームの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); }