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

指定したモニターにフォームを表示する

ここでは、マルチモニター(マルチディスプレイ、デュアルディスプレイ)を使用していて、表示画面を拡張する設定となっている時に、指定したモニターにフォームを表示(あるいは、移動)する方法について説明します。

それにはまず、フォームを表示させたいモニターを表すScreenオブジェクトを取得します。Screen.AllScreensプロパティですべてのモニターを取得できますので、この中から目的のモニターを探します。

次に、Screen.Boundsプロパティでモニターの範囲を取得します。この範囲にフォームを表示(あるいは、移動)すれば、そのモニターにフォームが表示されます。

以下の例では、フォーム(Form1)にコンボボックス(ComboBox1)とボタンコントロール(Button1)がすでに設置されているものとして、Button1をクリックするとComboBox1で選択されているモニターの左上にForm2を表示するようにしています。

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

'フォームのLoadイベントハンドラ
Private Sub Form1_Load(sender As Object, e As EventArgs) _
        Handles MyBase.Load
    'コンボボックスにディスプレイのリストを表示する
    Me.ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
    'デバイス名が表示されるようにする
    Me.ComboBox1.DisplayMember = "DeviceName"
    Me.ComboBox1.DataSource = Screen.AllScreens
End Sub

'Button1のClickイベントハンドラ
Private Sub Button1_Click(sender As Object, e As EventArgs) _
        Handles Button1.Click
    '表示させるフォームを作成する
    Dim f As New Form2()
    'フォームを表示するディスプレイのScreenを取得する
    Dim s As Screen = DirectCast(Me.ComboBox1.SelectedItem, Screen)
    'フォームの開始位置をディスプレイの左上座標に設定する
    f.StartPosition = FormStartPosition.Manual
    f.Location = s.Bounds.Location
    'フォームを表示する
    f.Show()
End Sub
C#
コードを隠すコードを選択
//using System.Windows.Forms;

//フォームのLoadイベントハンドラ
private void Form1_Load(object sender, EventArgs e)
{
    //コンボボックスにディスプレイのリストを表示する
    this.ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
    //デバイス名が表示されるようにする
    this.ComboBox1.DisplayMember = "DeviceName";
    this.ComboBox1.DataSource = Screen.AllScreens;
}

//Button1のClickイベントハンドラ
private void Button1_Click(object sender, EventArgs e)
{
    //表示させるフォームを作成する
    Form2 f = new Form2();
    //フォームを表示するディスプレイのScreenを取得する
    Screen s = (Screen)this.ComboBox1.SelectedItem;
    //フォームの開始位置をディスプレイの左上座標に設定する
    f.StartPosition = FormStartPosition.Manual;
    f.Location = s.Bounds.Location;
    //フォームを表示する
    f.Show();
}

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

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