Windows フォームで高 DPI のサポートHigh DPI support in Windows Forms

以降、.NET Framework 4.7 では、Windows フォームには、共通の高 DPI および動的 DPI シナリオの機能強化が含まれています。Starting with the .NET Framework 4.7, Windows Forms includes enhancements for common high DPI and dynamic DPI scenarios. 不足している機能には次が含まれます。These include:

  • スケーリングとさまざまな Windows フォームのレイアウトの機能強化を制御するなど、MonthCalendarコントロールとCheckedListBoxコントロール。Improvements in the scaling and layout of a number of Windows Forms controls, such as the MonthCalendar control and the CheckedListBox control.

  • 単一パスをスケーリングします。Single-pass scaling. .NET Framework 4.6 以前のバージョンで、スケーリングが必要以上にスケールする一部のコントロールの原因とする複数のパスから実行されました。In the .NET Framework 4.6 and earlier versions, scaling was performed through multiple passes, which caused some controls to be scaled more than was necessary.

  • Windows フォーム アプリケーションが起動された後に、ユーザー、DPI またはスケール ファクターを変更、動的 DPI シナリオのサポート。Support for dynamic DPI scenarios in which the user changes the DPI or scale factor after a Windows Forms application has been launched.

.NET Framework 4.7 以降では、.NET Framework のバージョンでは、高 DPI サポートの強化は、オプトイン機能です。In versions of the .NET Framework starting with the .NET Framework 4.7, enhanced high DPI support is an opt-in feature. これを活用するためにアプリケーションを構成する必要があります。You must configure your application to take advantage of it.

高 DPI のサポートを Windows フォーム アプリの構成Configuring your Windows Forms app for high DPI support

高 DPI 対応をサポートする Windows フォームの新しい機能は、.NET Framework 4.7 を対象し、Windows 10 Creators Update 以降の Windows オペレーティング システムで実行しているアプリケーションでのみ使用できます。The new Windows Forms features that support high DPI awareness are available only in applications that target the .NET Framework 4.7 and are running on Windows operating systems starting with the Windows 10 Creators Update.

さらに、Windows フォーム アプリケーションで高 DPI のサポートを構成するにする必要があります、次のように行います。In addition, to configure high DPI support in your Windows Forms application, you must do the following:

  • Windows 10 と互換性を宣言します。Declare compatibility with Windows 10.

    これを行うには、マニフェスト ファイルに、次を追加します。To do this, add the following to your manifest file:

    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
      <application>
        <!-- Windows 10 compatibility -->
        <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
      </application>
    </compatibility>
    
  • モニターごとの DPI 認識を有効にする、 app.configファイル。Enable per-monitor DPI awareness in the app.config file.

    Windows フォームが導入されていますが、新しい <System.Windows.Forms.ApplicationConfigurationSection> の新機能と .NET Framework 4.7 以降では追加のカスタマイズをサポートする要素。Windows Forms introduces a new <System.Windows.Forms.ApplicationConfigurationSection> element to support new features and customizations added starting with the .NET Framework 4.7. 高 DPI をサポートする新しい機能を利用するには、アプリケーション構成ファイルに、次を追加します。To take advantage of the new features that support high DPI, add the following to your application configuration file.

    <System.Windows.Forms.ApplicationConfigurationSection>
      <add key="DpiAwareness" value="PerMonitorV2" />
    </System.Windows.Forms.ApplicationConfigurationSection>
    

    重要

    .NET Framework の以前のバージョンでは、マニフェストを使用して、高 DPI のサポートを追加します。In previous versions of the .NET Framework, you used the manifest to add high DPI support. このアプローチは推奨されなく app.config ファイルで定義された設定をオーバーライドするためです。This approach is no longer recommended, since it overrides settings defined on the app.config file.

  • 呼び出す静的EnableVisualStylesメソッド。Call the static EnableVisualStyles method.

    これは、アプリケーションのエントリ ポイントでは、最初のメソッド呼び出しでなければなりません。This should be the first method call in your application entry point. 例えば:For example:

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form2());
    }
    

個々 の高 DPI 機能を無効にします。Opting out of individual high DPI features

設定、DpiAwareness値をPerMonitorV2.NET Framework 4.7 以降では .NET Framework のバージョンでサポートされている、すべての高 DPI 認識の機能を有効にします。Setting the DpiAwareness value to PerMonitorV2 enables all high DPI awareness features supported by .NET Framework versions starting with the .NET Framework 4.7. 通常、これは、ほとんどの Windows フォーム アプリケーションに適しています。Typically, this is adequate for most Windows Forms applications. ただし、1 つまたは複数の個々 の機能を無効にすることがあります。However, you may want to opt out of one or more individual features. これを行うための最も重要な理由は、既存のアプリケーション コードは、その機能を既に処理です。The most important reason for doing this is that your existing application code already handles that feature. たとえば、アプリケーションでは、自動スケーリングを処理する場合は次のように、自動サイズ変更機能を無効にします。For example, if your application handles auto scaling, you might want to disable the auto-resizing feature as follows:

<System.Windows.Forms.ApplicationConfigurationSection>
  <add key="DpiAwareness" value="PerMonitorV2" />
  <add key="EnableWindowsFormsHighDpiAutoResizing" value="false" />
</System.Windows.Forms.ApplicationConfigurationSection>

個々 のキーおよび値の一覧は、次を参照してください。 Windows フォームの追加の構成要素します。For a list of individual keys and their values, see Windows Forms Add Configuration Element.

新しい DPI 変更イベントNew DPI change events

3 つの新しいイベントは、.NET Framework 4.7 以降では、プログラムによって動的 DPI の変更を処理することができます。Starting with the .NET Framework 4.7, three new events allow you to programmatically handle dynamic DPI changes:

  • DpiChangedAfterParentを親コントロールの DPI 変更イベントの後に、コントロールの DPI 設定がプログラムで変更またはフォームが発生したときに発生します。DpiChangedAfterParent, which is fired when the DPI setting for a control is changed programmatically after a DPI change event for it's parent control or form has occurred.
  • DpiChangedBeforeParentを親コントロールの DPI 変更イベントの前に、コントロールの DPI 設定がプログラムで変更またはフォームが発生したときに発生します。DpiChangedBeforeParent, which is fired when the DPI setting for a control is changed programmatically before a DPI change event for its parent control or form has occurred.
  • DpiChanged、フォームが現在表示されているディスプレイ デバイスの DPI 設定が変更されたときに、これが発生します。DpiChanged, which is fired when the DPI setting changes on the display device where the form is currently displayed.

新しいヘルパー メソッドとプロパティNew helper methods and properties

.NET Framework 4.7 では、さまざまな DPI スケールに関する情報を提供し、DPI スケールを実行できるようにする新しいヘルパー メソッドとプロパティも追加します。The .NET Framework 4.7 also adds a number of new helper methods and properties that provide information about DPI scaling and allow you to perform DPI scaling. 不足している機能には次が含まれます。These include:

バージョン管理に関する考慮事項Versioning considerations

.NET Framework 4.7 と Windows 10 Creators Update でを実行するだけでなく、アプリケーションもない高 DPI 機能強化と互換性のある環境で実行できます。In addition to running on .NET Framework 4.7 and Windows 10 Creators Update, your application may also run in an environment in which it isn't compatible with high DPI improvements. この場合、代替のアプリケーションを開発する必要があります。In this case, you'll need to develop a fallback for your application. 実行するために行うことができますカスタム描画スケーリングを処理します。You can do this to perform custom drawing to handle scaling.

これを行うには、アプリが実行されているオペレーティング システムを決定する必要があります。To do this, you also need to determine the operating system on which your app is running. 次のようなコードで行うことができます。You can do that with code like the following:

// Create a reference to the OS version of Windows 10 Creators Update.
Version OsMinVersion = new Version(10, 0, 15063, 0);

// Access the platform/version of the current OS.
Console.WriteLine(Environment.OSVersion.Platform.ToString());
Console.WriteLine(Environment.OSVersion.VersionString);

// Compare the current version to the minimum required version.
Console.WriteLine(Environment.OSVersion.Version.CompareTo(OsMinVersion));

エントリのアプリケーション マニフェストでサポートされているオペレーティング システムとして表示されていない場合、アプリケーションはありません Windows 10 が検出が正常に注意してください。Note that your application won't successfully detect Windows 10 if it wasn't listed as a supported operating system in the application manifest.

アプリケーションがビルドされた .NET Framework のバージョンをチェックすることもできます。You can also check the version of the .NET Framework that the application was built against:

Console.WriteLine(AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName);

関連項目See also