Visual Studio の Windows フォーム デザイナーでの HDPI/拡大縮小に関する問題を修正する

この記事では、Visual Studio を DPI 非対応プロセスとして実行することによる、HDPI モニター上での Windows フォーム デザイナーの拡大縮小の制限に起因するレンダリングの問題を解決する方法について説明します。 HDPI は high dots per inch (高解像度) の略であり、各ドットは物理デバイスのピクセルを表します。

ピクセル密度が高いほど、より鮮明な画像が作成され、サイズの拡大縮小要素が適切に表示されます。 適切な拡大縮小が適用されないと、ユーザー インターフェイス (UI) の要素とテキストが小さすぎて効果的に使用できず、重複する可能性があります。 この問題を解決できるように、Windows では DPI 設定に合わせて UI パーセンタイルが自動的に拡大縮小されます。 たとえば、100% の DPI 設定は 96 DPI を表し、125% は 120 DPI を表します。 モニターは以前は 96 ピクセル/インチで出荷されていました。これは、Windows が 100% ビットマップ描画のベースラインとして使用していたものです。 しかし、ディスプレイのテクノロジが進歩するにつれて、モニターは 300 DPI 以上のパネルと共に出荷されるようになりました。

アプリケーションが DPI 対応であることが明らかである場合、そのアプリはより高い DPI 設定で適切に動作するため、Windows で自動拡大縮小を適用できることになります。 逆に、DPI 非対応アプリケーションは固定 DPI 値 96 ピクセル/インチ (100%) でレンダリングされるため、自動拡大縮小は適用されません。

Windows フォーム デザイナーは DPI 非対応である

Note

Visual Studio 2022 バージョン 17.8 以降では、この記事で説明されている問題を回避できます。 Visual Studio 2022 バージョン 17.8 は、DPI 対応アプリケーション内の DPI 非対応タブをサポートしています。 「Visual Studio の DPI の機能強化」を参照してください。 これにより、Visual Studio を DPI 非対応モードで実行することなく、DPI 非対応コンテキスト用に Windows フォームを設計できます。 Windows フォーム プロジェクトでこの設定を使うには、プロジェクト ファイルでプロパティ ForceDesignerDPIUnawaretrue に設定します。

<PropertyGroup>
  ...
  <ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
</PropertyGroup>

既定では、Visual Studio はドット/インチ (DPI) 対応アプリケーションであり、表示は自動的に拡大縮小されます。 しかし、Windows フォーム デザイナーは DPI 非対応アプリであるため、ビットマップとして 96 DPI で表示されます。 自動拡大縮小がサポートされていないと、次の図のように、HDPI モニターでフォームを開いたときに問題や重複が発生します。

Screenshot of Windows Forms Designer on HDPI monitor that shows issues due to lack of autoscaling support.

HDPI モニター上の Windows フォーム デザイナーでフォームを開くと、Visual Studio に情報バーが表示され、モニターの現在の拡大縮小率 (150%/144 DPI など)、Visual Studio を Windows フォーム デザイナーに合わせて 100% の拡大縮小で再起動するオプション、その他の情報が表示されます。 100% の拡大縮小で再起動すると、VS が DPI 非対応になり、重複のない適切なレンダリングが可能になります。

Screenshot of the information bar in Visual Studio to restart in DPI-unaware mode.

ヒント

  1. 情報バーを閉じた後、Visual Studio を DPI 非対応として再起動したい場合は、DevEnv.exe ツールを使います
  2. デザイナーで作業していない場合は、情報バーを無視できます。 情報バーを引き続き表示させないように、通知を無効にすることもできます。

Visual Studio を DPI 非対応プロセスとして再起動する

これらの UI の問題を解決するために推奨される解決策は、DPI 非対応プロセスとして Visual Studio を再起動することです。これは、100% の拡大縮小 (96 DPI) で再起動することを意味します。

DPI 非対応に切り替えるには:

  • Windows フォーム デザイナーでフォームを開いたときに表示される黄色の情報バーの [100% のスケールで Visual Studio を再起動します] オプションを選択します。

Windows フォーム デザイナーでの作業が完了したら、Visual Studio を再起動して DPI 対応プロセスとして既定値に戻す必要があります。

DPI 対応に戻るには:

  • Visual Studio を閉じて再度開き、DPI 対応に戻ります。 または、情報バーの [DPI 対応のプロセスとして Visual Studio を再起動します] オプションを選択します。

Visual Studio を DPI 非対応として実行すると、デザイナー レイアウトの問題は解決されますが、フォントがぼやけて表示されたり、XAML デザイナーなどの他のデザイナーで問題が発生したりする可能性があります。 Visual Studio が DPI 非対応である場合、次のような異なる情報メッセージが表示されます: "Visual Studio は DPI 非対応のプロセスとして実行されています。 WPF と XAML のデザイナーが適切に表示されない可能性があります。"

注意

  • DPI 非対応のプロセスとして Visual Studio を再起動するオプションを選択した後、ツール ウィンドウのドッキングを解除している場合、ツール ウィンドウの位置が変わる可能性があります。
  • 既定の Visual Basic プロファイルを使用する場合、または [ツール]>[オプション]>[プロジェクトおよびソリューション] で、 [新しいプロジェクトを作成時に保存する] オプションの選択を解除している場合、Visual Studio では、DPI 非対応プロセスとして再起動したとき、プロジェクトを再び開くことができません。 しかし、 [ファイル]>[最近使ったプロジェクトとソリューション] を選択することで、プロジェクトを開くことができます。

Note

  • DPI 非対応プロセスとして Visual Studio を再起動するオプションを選択した後、ツール ウィンドウのドッキングを解除すると、ツール ウィンドウの位置が変わる可能性があります。
  • Visual Studio が DPI 非対応プロセスとして再起動したとき、既定の Visual Basic プロファイルによってプロジェクトが再度開かれることはありません。 代わりに、[ファイル]>[最近使ったプロジェクトとソリューション] を使ってプロジェクトにアクセスしてください。

Windows を使用してディスプレイのスケーリングを 100% に設定する

Visual Studio を使って表示の拡大縮小を切り替えたくない場合は、Windows の設定で拡大縮小を調整します。 たとえば、Windows 11 では、拡大縮小を 100% (96 DPI) に設定できます。

これを行うには、タスク バーの検索ボックスに「ディスプレイ設定」と入力し、[ディスプレイの設定を変更します] を選択します。 [設定] ウィンドウで、 [Change the size of text, apps, and other items](テキスト、アプリ、その他の項目のサイズを変更します)[100%] に設定します。 100% の拡大縮小 (96 DPI) では、ユーザー インターフェイスが小さすぎて実用的に使えない場合があることに注意してください。

DevEnv コマンド ライン ツールを使って拡大縮小を無効にする

UI (ユーザー インターフェイス) ツールではなくコマンド ライン ツールを使って表示設定を管理するには、DevEnv.exe を使用します。 devenv.exe コマンドでは /noscale をコマンドライン パラメーターとして受け取り、100% スケーリング モードで実行します。 その使用方法を以下に示します。

  1. Visual Studio メニュー バーから [ツール]>[コマンド ライン]>[開発者コマンド プロンプト] を選択します。
  2. 次に、「devenv /noScale」と入力します。

その他のオプション

前述のオプションに加え、次のオプションを試すこともできます。

トラブルシューティング

Visual Studio で DPI 対応移行が予想どおり動作しない場合、レジストリ エディターで HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\devenv.exe サブキーに dpiAwareness 値が含まれていないことを確認してください。 ある場合、削除してください。