次の方法で共有


.NET 10 用 Windows Forms の新機能

この記事では、.NET 10 の Windows フォーム (WinForms) の新機能の概要について説明します。 詳細については、 リリースのお知らせを参照してください。 リリースのお知らせを使用して、.NET 10 リリース全体の概要を確認します。 以降のセクションでは、Windows フォームに対する最も重要な変更について説明します。

.NET 10 は 2025 年 11 月にリリースされました。

リリースのお知らせ

各リリースのお知らせでは、.NET 10 の Windows フォームの変更に関する詳細情報が提供されます。

クリップボードの変更

Windows フォームには、クリップボード API の新しいコードが含まれています。 クリップボードは、コードを Windows Presentation Foundation (WPF) と共通化できるように再設計されました。 どちらのデスクトップ テクノロジも同じコードを共有し、クリップボードとの対話方法を統一できるようになりました。 詳細については、「 .NET 10 での Windows フォーム クリップボードと DataObject の変更」を参照してください。

BinaryFormatter は .NET 9 で非推奨扱いになりましたが、一部のクリップボード操作に使用されています。 それにより、該当するクリップボード操作のために互換性パッケージにオプトインするか、該当する操作を回避することが必要になっていました。 .NET 10 では、BinaryFormatter からの移行を促進するために一部のクリップボード メソッドが非推奨となり、使用すべきでないことが示されました。 BinaryFormatter の必要性をなくしていくために、クリップボード データの JSON シリアル化に役立つメソッドの追加が進められています。

非同期フォーム

Windows フォームには、完全に統合された非同期フォームのサポートがあります。 さらに、非同期タスクはフォームへの弱い参照を持つようになり、複数のウィンドウを管理するときに応答性の高い UI が有効になります。

Windows Forms for .NET 9 では、フォームとダイアログの非同期表示をサポートする新しいメソッドが導入されましたが、オプトイン プレビュー モードでは、この機能を使用するために コンパイラ エラーのWFO5002 を抑制する必要がありました。 このコンパイラ エラーは、.NET 10 ではトリガーされなくなりました。

次の API は実験用と見なされなくなりました。

カスタム デザイナーの改良

.NET Framework から、UITypeEditor や、ToolStripCollectionEditor コントロールに関連するエディターを含め、いくつかの DataGridView タイプが移植されました。 PropertyGrid と Windows フォーム デザイナーの [アクション] パネルに、それらのエディターが表示されるようになりました。

SnapLines はカスタム デザイナー用に修正されました。

ダーク モード

Windows フォームには、完全に統合されたダーク モードのサポートがあります。

Windows Forms for .NET 9 では、暫定的なダーク モードのビジュアル スタイルが導入されましたが、オプトイン プレビュー モードでは、この機能を使用するために コンパイラ エラーのWFO5001 を抑制する必要がありました。 この機能は、.NET 10 以降では、このコンパイラ エラーの背後で保護されなくなりました。

Application.SetColorMode(SystemColorMode) API は実験段階とは見なされなくなりました。

ControlStyles ApplyThemingImplicitly 使用法の明確化

コントロールは、アプリケーションに対して設定されたカラー モード (濃色または明るい色) に従います。 ただし、独自のコントロールを作成して描画しているが、スクロール バーなどの既存の Win32 共通コントロールを使用している場合もあります。 これらのコントロールは、 CreateParams プロパティを読み取る前にテーマの適用を選択しない限り、明るい色のままです。 また、既にテーマに従っているコントロールを継承し、ボタンなど、図面を完全に制御できるようにオプトアウトする場合もあります。

ユース ケースに関係なく、パラメーターを基底クラスから読み取る前に、 Control.CreateParams プロパティをオーバーライドし、 SetStyle(ControlStyles.ApplyThemingImplicitly, true) (オプトイン) または SetStyle(ControlStyles.ApplyThemingImplicitly, false) (オプトアウト) を呼び出します。 コンストラクターでこのスタイルを設定 することはできません 。 基本コンストラクターは、コンストラクターを呼び出す前に、 CreateParams プロパティを読み取ります。 次のコード スニペットは、オプトインする方法を示しています。

public partial class CustomControl1 : Control
{
    protected override CreateParams CreateParams
    {
        get
        {
            // Set this style BEFORE base.CreateParams is created and returned.
            SetStyle(ControlStyles.ApplyThemingImplicitly, true);

            CreateParams cp = base.CreateParams;
            
            // Other logic
            return cp;
        }
    }

    // Base class constructor is going to read CreateParams property
    // before your constructor code runs.
    public CustomControl1()  
    {
        // At this point, CreateParams property is already read, you
        // can't set ApplyThemingImplicitly here.
        InitializeComponent();
    }
}
Public Class CustomControl1

    Protected Overrides ReadOnly Property CreateParams As CreateParams
        Get
            ' Set this style BEFORE base.CreateParams is created and returned.
            SetStyle(ControlStyles.ApplyThemingImplicitly, True)

            Dim cp As CreateParams = MyBase.CreateParams

            ' Other logic
            Return cp
        End Get
    End Property

    ' Base class constructor is going to read CreateParams property
    ' before your constructor code runs.
    Sub New()

        ' At this point, CreateParams property is already read, you
        ' can't set ApplyThemingImplicitly here.

        InitializeComponent()

    End Sub

End Class

バグの修正

Windows フォーム for .NET 10 で修正されたバグの一部を次に示します。

  • 編集モードであったDataGridViewのホスティング ダイアログが閉じられていると、InvalidOperationExceptionが発生します。 この原因となっているバグが修正されました。
  • コンパイラ エラー WFO1000 が改善され、 IComponentから派生したインターフェイスに関連する誤検知が減少しました。
  • PrinterSettings.DefaultPageSettings.Colorが正しくない値を返す回帰を修正しました。
  • MSHTML コンポーネントのメモリ リークの解決。

アクセシビリティ

NVDA スクリーン リーダーのサポートが改善されました。

コードのクリーンアップ

非推奨の .NET ランタイムと不要なパッケージ参照が削除されました。 警告に対処し、コードの品質を向上させるために、コード スタイルがクリーンアップされました。

ScreenCaptureMode API(スクリーンキャプチャモードAPI)

画面キャプチャ アプリケーション (Windows API を使用) がフォームをキャプチャできないようにするための新しい API が導入されました。 この機能は、ユーザー名、ユーザー ID、パスワードなどの機密情報が漏洩しないように保護するのに役立ちます。

Form.ScreenCaptureModeは、キャプチャ動作を制御するために次のいずれかの値に設定されます。

  • Allow—(既定値) フォームのキャプチャを許可します。
  • HideContent—キャプチャすると、フォームが黒く表示されます。
  • HideWindow—キャプチャ時にフォームをぼかします。 (Windows 10 20H1 バージョン 2004 以降が必要です)。

アナライザーの機能強化

既存のアナライザーは、誤検知を減らすために微調整されています。

新しいアナライザーが追加されました。