.NET 6 用の新機能 (Windows フォーム .NET)

この記事では、.NET 6 における Windows フォームの新しい機能と拡張機能についていくつか説明します。

.NET Framework から .NET 6 に移行するときに注意する必要がある破壊的変更がいくつかあります。 詳細については、Windows フォームでの破壊的変更に関するページを参照してください。

C# 用に更新されたテンプレート

.NET 6 には、標準コンソール アプリケーション テンプレートに対して多くの変更が導入されました。 これらの変更に従って、C# 用の Windows フォーム テンプレートが更新され、global using ディレクティブファイル スコープの名前空間、および Null 許容参照型が既定で有効になりました。

Windows フォームで引き継がれていない新しい C# テンプレートの機能の 1 つに、最上位レベルのステートメントがあります。 一般的な Windows フォームのアプリケーションは、[STAThread] 属性を必要とし、デザイナー コード ファイルなどの複数のファイルに分割された複数の型で構成されます。そのため、最上位レベルのステートメントを使用することに意味がありません。

新しいアプリケーション ブートストラップ

新しい Windows フォーム アプリケーションを生成するテンプレートを使用すると、Main メソッドが作成されます。これは、実行時にアプリケーションのエントリ ポイントとして機能します。 このメソッドに含まれているコードによって、Windows フォームが構成され、ブートストラップ コードと呼ばれる最初のフォームが表示されます。

class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

.NET 6 では、これらのテンプレートが変更され、ApplicationConfiguration.Initialize メソッドによって呼び出される新しいブートストラップ コードを使用するようになりました。

class Program
{
    [STAThread]
    static void Main()
    {
        ApplicationConfiguration.Initialize();
        Application.Run(new Form1());
    }
}

このメソッドはコンパイル時に自動的に生成され、Windows フォームを構成するコードを含んでいます。 これらの設定はプロジェクト ファイルでも制御できるようになり、コードでの構成を回避することができます。 たとえば、生成されるメソッドは次のコードのようになります。

public static void Initialize()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.SetHighDpiMode(HighDpiMode.SystemAware);
}

この新しいブートストラップ コードは、Windows フォームのビジュアルデザイナーを構成するために Visual Studio によって使用されます。 新しいブートストラップ コードの使用をオプト アウトする場合、古いコードを復元して ApplicationConfiguration.Initialize メソッドをバイパスすれば、設定したブートストラップ設定が Windows フォームのビジュアル デザイナーによって優先されなくなります。

Initialize メソッドで生成された設定は、プロジェクト ファイルによって制御されます。

プロジェクトレベルのアプリケーション設定

Windows フォームの新しいアプリケーション ブートストラップ機能を補完するには、アプリケーションのスタートアップ コードで以前に設定されたいくつかの Application 設定をプロジェクト ファイルで設定する必要があります。 プロジェクト ファイルでは、次のアプリケーション設定を構成できます。

プロジェクトの設定 既定値 対応する API
ApplicationVisualStyles true Application.EnableVisualStyles
ApplicationUseCompatibleTextRendering false Application.SetCompatibleTextRenderingDefault
ApplicationHighDpiMode SystemAware Application.SetHighDpiMode
ApplicationDefaultFont Segoe UI, 9pt Application.SetDefaultFont

次の例は、これらのアプリケーション関連のプロパティを設定するプロジェクト ファイルを示しています。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net6.0-windows</TargetFramework>
    <Nullable>enable</Nullable>
    <UseWindowsForms>true</UseWindowsForms>
    <ImplicitUsings>enable</ImplicitUsings>

    <ApplicationVisualStyles>true</ApplicationVisualStyles>
    <ApplicationUseCompatibleTextRendering>false</ApplicationUseCompatibleTextRendering>
    <ApplicationHighDpiMode>SystemAware</ApplicationHighDpiMode>
    <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont>

  </PropertyGroup>

</Project>

Windows フォームのビジュアル デザイナーで、これらの設定が使用されます。 詳細については、「Visual Studio デザイナーの機能強化」セクションを参照してください。

既定のフォントを変更する

.NET Core 3.0 上の Windows フォームには、Windows フォーム用の新しい既定のフォントとして、Segoe UI、9pt が導入されました。 このフォントは、Windows ユーザー エクスペリエンス (UX) のガイドラインに合わせてより適切に調整されています。 ただし、.NET Framework で使用される既定のフォントは、Microsoft Sans Serif、8.25pt です。 この変更によって、一部のお客様は、ピクセルパーフェクト レイアウトを利用している大規模なアプリケーションを .NET Framework から .NET に移行することが困難になりました。 アプリケーション全体のフォントを変更するには、プロジェクト内のすべてのフォームを編集して Font プロパティを代替フォントに設定するというのが唯一の方法でした。

既定のフォントは、次の 2 つの方法で設定できるようになりました。

  • プロジェクト ファイルの既定のフォントがアプリケーション ブートストラップ コードによって使用されるように設定する:

    重要

    この方法をお勧めします。 プロジェクトを使用して新しいアプリケーション ブートストラップ システムを構成すると、Visual Studio ではこれらの設定をデザイナーで使用できるようになります。

    次の例では、プロジェクト ファイルによって、.NET Framework で使用されているのと同じフォントが Windows フォームでも使用されるように構成されています。

    <Project Sdk="Microsoft.NET.Sdk">
    
      <!-- other settings -->
    
      <PropertyGroup>
        <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont>
      </PropertyGroup>
    
    </Project>
    

- または -

  • 以前の方法で Application.SetDefaultFont API を呼び出します (ただし、デザイナーはサポートされていません)。

    class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.SetHighDpiMode(HighDpiMode.SystemAware);
            Application.SetDefaultFont(new Font(new FontFamily("Microsoft Sans Serif"), 8.25f));
            Application.Run(new Form1());
        }
    }
    

Visual Studio デザイナーの機能強化

Windows フォームのビジュアル デザイナーに既定のフォントが正確に反映されるようになりました。 .NET 用 Windows フォームの以前のバージョンを使用すると、ビジュアル デザイナーに Segoe UI フォントが正しく表示されず、実際には、.NET Framework の既定のフォントを使用してフォームをデザインしていました。 新しいアプリケーション ブートストラップ 機能により、ビジュアル デザイナーに既定のフォントが正確に反映されるようになりました。 さらに、ビジュアル デザイナーでは、プロジェクト ファイルで設定されている既定のフォントを優先します。

Windows Forms designer is using the default font setting in Visual Studio

その他のランタイム デザイナー

.NET Framework に含まれていて、汎用デザイナーの構築 (レポート デザイナーの構築など) を可能にしていたデザイナーが .NET 6 に追加されました:

PerMonitorV2 における高 DPI の機能強化

PerMonitorV2 を使用した高 DPI レンダリングが次のように改良されました:

  • アプリケーションと同じ DPI 認識を使用してコントロールが作成される。

  • コンテナー コントロールと MDI 子ウィンドウのスケーリング動作が改良されている。

    たとえば、.NET 5 では、Windows フォーム アプリを 200% スケーリングのモニターから 100% スケーリングのモニターに移動すると、コントロールが誤って配置されます。 これは .NET 6 で大幅に改良されました。

    High DPI improvements in .NET 6 for Windows Forms

新しい API

新しい Visual Basic API

更新された API

アクセシビリティの向上

Microsoft UI オートメーションのパターンは、ナレーターや Jaws などのユーザー補助ツールでより適切に動作します。

関連項目