Windows フォーム for .NET 9 の新機能
この記事では、Windows フォーム for .NET 9 の新機能について説明します。
非同期フォーム
重要
この機能セットは、Control.InvokeAsync
を除いて試験段階です。
最新のアプリには非同期通信モデルが必要です。 .NET でWindows フォームが拡大するにつれて、UI スレッドで実行するために、async
メソッドへのマーシャリングが必要なコンポーネントが増えています。 たとえば、 WebView2、ネイティブ Windows 10 および Windows 11 API、 Semantic Kernel などの最新の非同期ライブラリなどのコントロール。 もう 1 つのシナリオは、WPF、WinUI、.NET MAUI などの他の UI スタックからWindows フォームasync
を中心に構築された MVVM ViewModel を共有する場合です。
非同期シナリオをサポートするために追加された新しいメソッドの一覧を次に示します。
- System.Windows.Forms.Form.ShowAsync
- Form.ShowDialogAsync
- TaskDialog.ShowDialogAsync
- Control.InvokeAsync(この API は試験段階ではありません)。
この API は試験的であるため、コンパイラ エラーの背後で保護されます。 エラーを抑制し、API へのアクセスを有効にするには、次の PropertyGroup
をプロジェクト ファイルに追加します。
<PropertyGroup>
<NoWarn>$(NoWarn);WFO5002</NoWarn>
</PropertyGroup>
ヒント
このルールを抑制する方法の詳細については、「 Compiler エラー WFO5002」を参照してください。
BinaryFormatter がサポートされなくなりました
BinaryFormatter
は、逆シリアル化攻撃に対して脆弱であり、サービス拒否 (DoS)、情報漏えい、またはリモート コード実行につながる可能性があるため、安全でないと見なされます。 逆シリアル化の脆弱性がよく理解される前に実装されており、その設計は最新のセキュリティのベスト プラクティスに従っていません。
.NET 9 以降では、これらのセキュリティ リスクを防ぐために実装が削除されました。 BinaryFormatter
を使用すると、PlatformNotSupportedException
例外がスローされます。
Windows フォームクリップボードやドラッグ アンド ドロップ操作のデータをシリアル化する場合や、最も重要なのはWindows フォーム デザイナーなど、多くのシナリオでBinaryFormatter
使用されます。 内部的には、Windows フォームは、既知の種類のセットを持つ特定のユース ケースを処理するために、BinaryFormatter
のより安全なサブセットを引き続き使用します。
.NET 9 のWindows フォームには、知らないうちにバイナリ シリアル化に参加する時間を特定するのに役立つアナライザーが付属しています。
BinaryFormatter
の詳細については、BinaryFormatter の移行ガイドWindows フォーム参照。
ダーク モード
重要
この機能セットは試験段階です。
.NET 10 でのサポートの最終決定を目的として、ダーク モードの予備的なサポートがWindows フォームに追加されました。 カラー モードが変更されると、 SystemColors が一致するように変更されます。 アプリのカラー モードは、次のいずれかの値に設定できます。
SystemColorMode.Classic
—(既定) ライト モード。以前のバージョンのWindows フォームと同じです。SystemColorMode.System
—Windows によって設定された明るいモードまたは暗いモードを尊重します。SystemColorMode.Dark
—ダーク モードを使用します。
カラー モードを適用するには、プログラムのスタートアップ コードで Application.SetColorMode(SystemColorMode) を呼び出します。
namespace MyExampleProject;
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.SetColorMode(SystemColorMode.Dark);
Application.Run(new Form1());
}
}
Friend Module Program
<STAThread()>
Friend Sub Main(args As String())
Application.SetHighDpiMode(HighDpiMode.SystemAware)
Application.EnableVisualStyles()
Application.SetCompatibleTextRenderingDefault(False)
Application.SetColorMode(SystemColorMode.Dark)
Application.Run(New Form1)
End Sub
End Module
この API は試験的であるため、コンパイラ エラーの背後で保護されます。 エラーを抑制し、API へのアクセスを有効にするには、次の PropertyGroup
をプロジェクト ファイルに追加します。
<PropertyGroup>
<NoWarn>$(NoWarn);WFO5001</NoWarn>
</PropertyGroup>
ヒント
このルールを抑制する方法の詳細については、「 Compiler エラー WFO5001」を参照してください。
FolderBrowserDialog の機能強化
FolderBrowserDialog
では、 SelectedPaths 配列に格納されている複数のフォルダーの選択がサポートされるようになりました。 複数のフォルダーを有効にするには、 Multiselect を true
に設定します。
System.Drawing の新機能と機能強化
System.Drawing ライブラリには、GDI+ 効果のラップ、ReadOnlySpan
のサポート、相互運用コードの生成の向上など、多くの機能強化が行われました。
System.Drawing では GDI+ 効果がサポートされます
System.Drawing ライブラリで、ぼかしや濃淡などの GDI+ ビットマップ効果がサポートされるようになりました。 効果は GDI+ の一部でしたが、これまで System.Drawing によって公開されませんでした。
効果は、Bitmap メソッドを呼び出すことによってBitmap.ApplyEffect(Effect, Rectangle)に適用されます。 効果を適用する領域の効果とオプションの Rectangle
を指定します。 Rectangle.Emptyを使用してイメージ全体を処理します。
System.Drawing.Imaging.Effects名前空間には、適用できる効果が含まれています。
- BlackSaturationCurveEffect
- BlurEffect
- BrightnessContrastEffect
- ColorBalanceEffect
- ColorCurveEffect
- ColorLookupTableEffect
- ColorMatrixEffect
- ContrastCurveEffect
- CurveChannel
- DensityCurveEffect
- ExposureCurveEffect
- GrayScaleEffect
- HighlightCurveEffect
- InvertEffect
- LevelsEffect
- MidtoneCurveEffect
- ShadowCurveEffect
- SharpenEffect
- TintEffect
- VividEffect
- WhiteSaturationCurveEffect
System.Drawing ではスパンがサポートされます
配列を受け入れる多くのメソッドは、 ReadOnlySpan
も受け入れるように拡張されています。 たとえば、 GraphicsPath.AddLines(ReadOnlySpan<Point>)、 Graphics.DrawLines(Pen, ReadOnlySpan<Point>)、 DrawPolygon(Pen, ReadOnlySpan<Point>)などのメソッドは、配列または ReadOnlySpan
を受け入れます。
相互運用に CsWin32 を使用する
すべての相互運用コードは、C# P/Invoke ソース ジェネレーターである CsWin32 に置き換えられました。
ToolStrip
ToolStripコントロールとToolStripItem コントロールに次の機能強化が追加されました。
ToolStrip
、AllowClickThroughに新しいプロパティが追加されました。true
に設定すると、フォームがフォーカスされていない間にコントロールを操作できます。
.NET Core 3.1 がリリースされたとき、Menu
やMainMenu
など、MenuItem
関連のすべてのコントロールが削除されました。 ToolStrip
代わりに、 ToolStripMenuItem
を使用する必要があります。 ただし、ToolStripItem
の基底クラスであるToolStripMenuItem
は、MenuItem.Select
イベントに代わるものはありませんでした。 このイベントは、マウスまたはキーボードを使用して項目を強調表示するときに発生しました。
.NET 9 には ToolStripItem.SelectedChangedが追加されました。メニュー項目が強調表示されていることを検出するために使用できます。
.NET Desktop feedback