22

2番目の画面に表示したいフォームがあるアプリケーションがあります。

つまり、アプリケーションが画面 A で実行されている場合、メニューをクリックしてフォームを表示すると、画面 B に表示され、アプリケーションが画面 B で実行されている場合と同じように、メニューをクリックしてフォームを表示すると、画面 A に表示されます。

4

4 に答える 4

43

このクラスを使用しScreenて、元のフォームが表示されていない画面を見つけ、Locationその画面の に基づいて 2 番目のフォームのプロパティを設定する必要がありますBounds

例えば:

var myScreen = Screen.FromControl(originalForm);
var otherScreen = Screen.AllScreens.FirstOrDefault(s => !s.Equals(myScreen)) 
               ?? myScreen;
otherForm.Left = otherScreen.WorkingArea.Left + 120;
otherForm.Top = otherScreen.WorkingArea.Top + 120;

これは、任意の数の画面で機能します。

Windows が 2 つの小さな画面ではなく 1 つの大きな画面を認識するようにビデオ カードが構成されている可能性があることに注意してください。その場合、これはさらに困難になります。

于 2010-04-01T14:32:42.900 に答える
19

以下は、任意のモニターにフォームを表示できる機能です。現在のシナリオでは、これを呼び出すことができますshowOnMonitor(1);

基本的に、画面情報を取得してからScreen.AllScreensそれぞれの寸法を取得し、必要な場所にフォームを配置する必要があります

function void showOnMonitor(int showOnMonitor) 
{ 
    Screen[] sc; 
    sc = Screen.AllScreens; 

    Form2 f = new Form2(); 

    f.FormBorderStyle = FormBorderStyle.None; 
    f.Left = sc[showOnMonitor].Bounds.Left; 
    f.Top = sc[showOnMonitor].Bounds.Top; 
    f.StartPosition = FormStartPosition.Manual; 

    f.Show(); 
}

実際に2つの画面があることを確認するために検証を行うことを忘れないでください。そうしないと、アクセスに対して例外がスローされますsc[showOnMonitor]

于 2010-04-01T14:32:12.907 に答える
12

OnLoad メソッドで、ウィンドウの場所を変更します。

protected void Form1_OnLoad(...) {
    showOnMonitor(1);
}

private void showOnMonitor(int showOnMonitor) 
{ 
    Screen[] sc; 
    sc = Screen.AllScreens; 
    if (showOnMonitor >= sc.Length) {
        showOnMonitor = 0;
    }

    this.StartPosition = FormStartPosition.Manual; 
    this.Location = new Point(sc[showOnMonitor].Bounds.Left, sc[showOnMonitor].Bounds.Top);
    // If you intend the form to be maximized, change it to normal then maximized.
    this.WindowState = FormWindowState.Normal;
    this.WindowState = FormWindowState.Maximized;
}
于 2011-11-18T05:28:13.387 に答える