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

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

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

高 DPI の機能強化

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

  • 入れ子になったコントロールを正しくスケーリングします。 たとえば、タブ ページに配置されているパネル内のボタンなどです。

  • PerMonitorV2 に設定された ApplicationHighDpiMode を実行するアプリケーションに対する現在のモニター DPI の設定に基づいて、Form.MaximumSizeForm.MinimumSize プロパティをスケーリングします。

    .NET 7 では、この機能は既定で無効になっており、この変更を受け取るにはオプトインする必要があります。 .NET 8 以降では、この機能は既定で有効になっており、以前の動作に戻すにはオプトアウトする必要があります。

    機能を有効にするには、runtimeconfig.jsonconfigProperties を設定します。

    {
      "runtimeOptions": {
        "tfm": "net7.0",
        "frameworks": [
            ...
        ],
        "configProperties": {
          "System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi": true,
        }
      }
    }
    

アクセシビリティの向上と修正

このリリースでは、アクセシビリティがさらに向上しています。それには次の項目が含まれますが、これらだけではありません。

  • スクリーン リーダーで見られた読み上げ関連の問題の多くが対処されており、コントロールに関する情報が正くなっています。 たとえば、グループが展開されたり折りたたまれたりしているときに、ListView が正しく読み上げられるようになりました。

  • その他のコントロールで UI オートメーションのサポートが提供されるようになりました。

  • ナレーターなどの支援ツールでの Windows フォーム アプリケーションの実行に関連するメモリ リークが修正されました。

  • 支援ツールでフォーカス インジケーターが正確に描画され、入れ子になったフォームと複合コントロールの一部の要素 (DataGridViewListViewTabControl など) の正しい境界ボックスが報告されるようになりました。

  • オートメーション UI の ExpandCollapse コントロール パターンが、ListViewTreeViewPropertyGrid コントロールで適切に実装されるようになり、展開可能な項目に対してのみアクティブ化されます。

  • コントロール内のさまざまな色コントラスト比の修正。

  • ハイ コントラスト テーマでの ToolStripTextBoxToolStripButton の見やすさの向上。

データ バインディングの改善 (プレビュー)

Windows フォームには既に強力なバインド エンジンがありましたが、WPF によって提供されるデータ バインディングと同様の、より最新の形式のデータ バインディングが導入されています。

新しいデータ バインディング機能を使うと、MVVM パターンを完全に利用でき、Windows フォームの ViewModels のオブジェクト リレーショナル マッパーを以前より簡単に使用できます。 これにより、分離コード ファイル内のコードを減らすことができ、新しいテストの可能性が開かれます。 さらに重要なのは、Windows フォームと他の .NET GUI フレームワーク (WPF、UWP/WinUI、.NET MAUI など) 間でコードを共有できるようになることです。 また、よく寄せられる質問にはっきりお答えしておくと、Windows フォームに XAML を導入する予定はありません。

これらの新しいデータ バインディング機能は、.NET 7 ではプレビュー段階であり、.NET 8 ではこの機能に関するさらに多くの作業が行われます。

新しいバインディングを有効にするには、EnablePreviewFeatures の設定をプロジェクト ファイルに追加します。 これは、C# と Visual Basic の両方でサポートされています。

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

  <!-- other settings -->

  <PropertyGroup>
    <EnablePreviewFeatures>true</EnablePreviewFeatures>
  </PropertyGroup>

</Project>

次のコード スニペットでは、Windows フォームのさまざまなクラスに追加された新しいプロパティ、イベント、メソッドを示します。 次のコード例は C# のものですが、Visual Basic にも当てはまります。

public class Control  {
    [BindableAttribute(true)]
    public virtual object DataContext { get; set; }
    [BrowsableAttribute(true)]
    public event EventHandler DataContextChanged;
    protected virtual void OnDataContextChanged(EventArgs e);
    protected virtual void OnParentDataContextChanged(EventArgs e);
}

[RequiresPreviewFeaturesAttribute]
public abstract class BindableComponent : Component, IBindableComponent, IComponent, IDisposable {
    protected BindableComponent();
    public BindingContext? BindingContext { get; set; }
    public ControlBindingsCollection DataBindings { get; }
    public event EventHandler BindingContextChanged;
    protected virtual void OnBindingContextChanged(EventArgs e);
}

public abstract class ButtonBase : Control {
    [BindableAttribute(true)]
    [RequiresPreviewFeaturesAttribute]
    public ICommand? Command { get; set; }
    [BindableAttribute(true)]
    public object? CommandParameter { [RequiresPreviewFeaturesAttribute] get; [RequiresPreviewFeaturesAttribute] set; }
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler? CommandCanExecuteChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler? CommandChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler? CommandParameterChanged;
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandCanExecuteChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandParameterChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnRequestCommandExecute(EventArgs e);
}

public abstract class ToolStripItem : BindableComponent, IComponent, IDisposable, IDropTarget {
    [BindableAttribute(true)]
    [RequiresPreviewFeaturesAttribute]
    public ICommand Command { get; set; }
    [BindableAttribute(true)]
    public object CommandParameter { [RequiresPreviewFeaturesAttribute] get; [RequiresPreviewFeaturesAttribute] set; }
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler CommandCanExecuteChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler CommandChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler CommandParameterChanged;
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandCanExecuteChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandParameterChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnRequestCommandExecute(EventArgs e);
}

その他の機能強化

その他に、次のような重要な変更があります。

  • ドラッグ アンド ドロップ処理は、アイコンやテキスト ラベルなどのより豊富な表示効果を備えた Windows のドラッグ アンド ドロップ機能と同じものになります。
  • フォルダーとファイルのダイアログで使用できるオプションが増えます。
    • 最近使ったものに追加する
    • 書き込みアクセス権をチェックする
    • 展開モード
    • OK に操作を要求する
    • 読み取り専用を選択する
    • 隠しファイルを表示する
    • ピン留めされた場所を表示する
    • プレビューを表示する
  • ErrorProvider に、HasErrors プロパティが含まれるようになりました。
  • フォームのスナップ レイアウトは、Windows 11 で修正されます。

関連項目