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

解像度によりフォームの大きさを変えて表示する

自動スケーリングを利用する

.NET Framework 1.1以前では、Form.AutoScaleプロパティをTrueにすることにより、フォームが自動スケーリングされるようになります。自動スケーリングが有効になっていると、表示解像度(DPI)やシステムフォントの違いにより、フォームの大きさが自動的に調節されます。デフォルトでAutoScaleプロパティはTrueになっています。なお明示的にスケーリングを実行するには、Form.ApplyAutoScalingメソッドを呼び出します。

.NET Framework 2.0以降では、ContainerControl.AutoScaleModeプロパティにより、自動スケーリングを有効にできます。AutoScaleModeプロパティがDpiの時は、ディスプレイの解像度を基準として、スケーリングを行います。例えば、Windowsの「画面のプロパティ」の詳細設定でDPI設定を変更すると、その割合によってフォームの大きさも変化します。AutoScaleModeプロパティがFontの時はクラスで使用されているフォント(通常はシステムのフォント)の大きさを基準として、スケーリングを行います。

AutoScaleModeプロパティがInheritの時は、コントロールの親のAutoScaleModeに従ってスケーリングを行います。親がなければ、自動スケーリングは無効です。Noneでは自動スケーリングが無効です。デフォルトではNoneです。

なお明示的にスケーリングを実行するには、ContainerControl.PerformAutoScaleメソッドを呼び出します。

自動スケーリングについて詳しくは、「Windows フォームにおける自動スケーリング」をご覧ください。

画面の大きさにより、フォームの大きさを変える

画面の大きさによりフォームの大きさを変えたいのであれば、「ディスプレイの大きさ(画面の領域、解像度)を取得する」と「フォームの位置と大きさを取得、変更する」により、解決できるでしょう。

以下にフォームの大きさを画面の半分にする例を示します。ここではフォームのLoadイベントハンドラに記述していますが、もちろんフォームクラスのコンストラクタ等でも結構です。

VB.NET
コードを隠すコードを選択
'フォームのLoadイベントハンドラ
Private Sub Form1_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load
    'フォームの大きさを画面の半分にする
    Me.Width = Screen.GetBounds(Me).Width \ 2
    Me.Height = Screen.GetBounds(Me).Height \ 2
End Sub
C#
コードを隠すコードを選択
//Form1のLoadイベントハンドラ
private void Form1_Load(object sender, System.EventArgs e)
{
    //フォームの大きさを画面の半分にする
    this.Width = Screen.GetBounds(this).Width / 2;
    this.Height = Screen.GetBounds(this).Height / 2;
}

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

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。