53

ユーザーが別のモニターに移動した場合に、別のモニターに確実に表示されるようにしたい C# Windows アプリケーションがあります。メイン フォームのサイズ、場所、ウィンドウの状態 (既に処理済み) を保存する必要がありますが、ユーザーがアプリケーションを閉じたときにどの画面にあったかを知る必要もあります。

Screen クラスを使用して現在の画面のサイズを特定していますが、アプリケーションが実行されている画面を特定する方法が見つかりません。

追記:皆様、ご回答ありがとうございます!ユーザーが誤ってウィンドウを表示領域の外に置いたり、画面サイズを変更してフォームが完全に表示されなくなったりした場合に備えて、適切な境界チェックを行うことができるように、ウィンドウがオンになっているモニターを特定したかったのです。

4

5 に答える 5

9

ウィンドウの位置とサイズを覚えていれば、それで十分です。以前に使用した位置に位置を設定したときに、それが2番目のモニターにあった場合は、そこに戻ります。

たとえば、両方のサイズが1280x1024の2つのモニターがあり、ウィンドウの左側の位置を2000pxに設定した場合、2番目のモニターに表示されます(2番目のモニターが最初のモニターの右側にあると仮定します):)

次回アプリケーションを起動したときに2番目のモニターが表示されないことが心配な場合は、この方法を使用して、ウィンドウがいずれかの画面と交差しているかどうかを判断できます。

private bool isWindowVisible(Rectangle rect)
{
    foreach (Screen screen in Screen.AllScreens)
    {
        if (screen.Bounds.IntersectsWith(rect))
            return true;
    }
    return false;
}

ウィンドウの目的の場所を渡すだけで、いずれかの画面に表示されるかどうかがわかります。楽しみ!

于 2009-07-13T19:41:30.593 に答える
7

で現在の画面を取得できます

var s = Screen.FromControl(this);

thisフォーム (またはフォーム上の任意のコントロール) はどこにありますか。それを覚える方法については少しトリッキーですが、Screen.AllScreens 配列のインデックス、または s.DeviceName を使用します。いずれの場合も、切断されたモニターを使用しないように、起動時の設定を使用する前に確認してください。

于 2009-07-13T19:49:09.593 に答える
5

フォームの場所は、フォームがどの画面にあるかを示します。保存した場所を使用して復元すると、同じ場所に復元する必要があるため、どの画面にあるのかを知る必要がある理由がよくわかりません(理由については拡張できます)。

それ以外の場合は、次のようなことができます。

Screen[] scr = Screen.AllScreens;
scr[i].Bounds.IntersectsWith(form.Bounds);

各画面には、Rectangle を返す Bounds プロパティがあります。IntersectsWith() 関数を使用して、フォームが画面内にあるかどうかを判断できます。

また、基本的には Screen クラスでもこれを行う機能を提供します

Screen screen = Screen.FromControl(form);
于 2009-07-13T19:56:37.270 に答える