【開発】.Net C#フォームが画面外出てないか調査

開発ざれごと.net,c#,フォーム復帰,マルチモニタ

sc20120106111725

自分がWindowsアプリを組む際、なんでかウィンドウサイズや位置の復帰とか好きで組み込むんですが、今回はそんな話を。


ただ単純に、this.leftやらthis.topなんかを保持すればすむ話なんですが、マルチモニター環境となると、そうも簡単にいきません。

オンラインソフトなんかでも、この対応してなくて、画面のどこかにいっちゃう時があります(もう、再インストールしか手段がなくなっちゃう)

この対策方法です。

    Rectangle rc = new Rectangle(
        rOption.ViewWinX,rOption.ViewWinY,
        rOption.ViewWinWidth,rOption.ViewWinHeight);
    //画面外に出ていないか調査
    foreach (Screen sc in Screen.AllScreens)
    {
        if (sc.WorkingArea.Contains(rc))
        {
            this.Location = rc.Location;
            this.Size = rc.Size;
            break;
        }
    }
}

自分の場合は、こんな感じにしてます(復帰時のコード。Load辺りで)

rOptionは、各情報を保持しているクラスです(この辺は割愛)

screen.allscreenで全てのモニターを取得してきて、rectangle.containsにて、フォームがモニター内にあるかどうかをチェックしてます。この場合、モニターの外に一部でもはみ出る場合は、除外されます。

除外の場合は、WindowsOS/Form既定の場所に表示されます。