Windows Forms での高DPI対応[2021年版]

Windows8 より、度重なって高い DPI への変更が加えられてきました。
現在は「拡大縮小とレイアウト」です。
これがないと、4K モニタなどは文字が小さすぎて読めないですよね。

Windows.Forms もこの値に合わせて自動的にスケールが変わるようになっています。
ただし、表示が少しボケたようになってしまうのが難点です。

これを、最新アプリのようにクリアな表示にする方法です。
Visual Studio 2019 で確認しました。

メイン ディスプレイのスケールは ~% に変更されています。は無視

プロジェクトを起動すると画面上部に黄色いバーが出ますが、「何も押さずそのまま」にしておきます。
(ここで 100% のスケールにしてしまうと、実行時の高 DPI 画面とフォームデザイナの表示が異なり、位置やサイズの調整ができなくなります

フォームレイアウトを調整する

Form プロパティの AutoScaleMode Dpi に設定します。

また、この状態でもしフォームの表示が崩れているようであれば位置やサイズの調整を行います。
(ここがちょっと面倒…)

app.manifest を作成し、コメントを外す

プロジェクトを選択した状態で 右クリック > 追加 > 新しい項目 > アプリケーション マニフェスト ファイル (Windows のみ)

作成するとプロジェクト下に app.manifest ファイルが作成されます。
そのファイルを開き、以下の部分がコメントになっているので、それを外します。

  <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
      <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
    </windowsSettings>
  </application>

実際のところ

フォームごとの対応ではなく、プロジェクトごとの対応になるので、既に大量のフォームを持つアプリケーションは修正が面倒ですね。

とはいえ、確実に効果は見込めるので、コツコツとフォームの位置サイズ調整をしていくといいのではないかと思います。

(追記).Net Framework4.7 以降

manifest を使う方法は非推奨となったようです。(long さん、情報ありがとうございます)

いまだに VB6 が許されているのんびり Windows なので「4.7 まだ使ってないです」なんてプロジェクトも結構あるかもしれませんが、アップデートの際は気を付けましょう。

2件のコメント

  1. マニフェストファイルを使用する方法は現在は非推奨となります。

    https://learn.microsoft.com/ja-jp/dotnet/desktop/winforms/high-dpi-support-in-windows-forms?view=netframeworkdesktop-4.8

    重要
    以前のバージョンの .NET Framework では、マニフェストを使用して高 DPI のサポートを追加していました。 この方法は、app.config ファイルで定義されている設定が上書きされるため、推奨されなくなりました

long へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA