ここでは、マルチモニター(マルチディスプレイ、デュアルディスプレイ)を使用していて、表示画面を拡張する設定となっている時に、指定したモニターにフォームを表示(あるいは、移動)する方法について説明します。
それにはまず、フォームを表示させたいモニターを表すScreenオブジェクトを取得します。Screen.AllScreensプロパティですべてのモニターを取得できますので、この中から目的のモニターを探します。
次に、Screen.Boundsプロパティでモニターの範囲を取得します。この範囲にフォームを表示(あるいは、移動)すれば、そのモニターにフォームが表示されます。
以下の例では、フォーム(Form1)にコンボボックス(ComboBox1)とボタンコントロール(Button1)がすでに設置されているものとして、Button1をクリックするとComboBox1で選択されているモニターの左上にForm2を表示するようにしています。
'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
//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(); }