.NET 5 の WinForms でプロジェクトを新規作成し設定を変えずに Form にコントロールを置いて実行すると高 DPI 環境で表示が崩れます。
■ 表示例
.NET Core 3.1 の場合
.NET 5 の場合
■ 対応方法
app.manifest ファイルを作成します。
ソリューションエクスプローラーで右クリック 追加 > 新しい項目 > 全般 > アプリケーション マニフェスト ファイル
でファイルを作成します。デフォルトでは app.manifest となりました(作成時に変更可)。
ファイルの中の dpiAware のセクションがコメントになっています。
<!-- アプリケーションが DPI 対応であり、それ以上の DPI で Windows によて自動的にスケーリングされないことを 示します。Windows Presentation Foundation (WPF) アプリケーションは自動的に DPI に対応し、オプトインする必要は ありません。さらに、この設定にオプトインする .NET Framework 4.6 を対象とする Windows Forms アプリケーションは、 app.config ファイルで 'EnableWindowsFormsHighDpiAutoResizing' 設定を 'true' に設定する必要があります。--> <!-- <application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> </windowsSettings> </application> -->
このコメントを外します。
<!-- アプリケーションが DPI 対応であり、それ以上の DPI で Windows によて自動的にスケーリングされないことを 示します。Windows Presentation Foundation (WPF) アプリケーションは自動的に DPI に対応し、オプトインする必要は ありません。さらに、この設定にオプトインする .NET Framework 4.6 を対象とする Windows Forms アプリケーションは、 app.config ファイルで 'EnableWindowsFormsHighDpiAutoResizing' 設定を 'true' に設定する必要があります。--> <application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> </windowsSettings> </application>
これでビルドをして実行すると、期待通りに動作しました。
簡単ですね。