Freigeben über


Neuerungen in Windows Forms für .NET 10

Dieser Artikel bietet eine allgemeine Übersicht über die Neuerungen mit Windows Forms (WinForms) in .NET 10. Ausführliche Informationen finden Sie in den Veröffentlichungsankündigungen. Verwenden Sie die Releaseankündigungen, um einen Überblick über die gesamte .NET 10-Version zu erhalten. In den restlichen Abschnitten werden einige der wichtigsten Änderungen an Windows Forms hervorgehoben.

.NET 10 wurde im November 2025 veröffentlicht.

Release-Ankündigungen

Jede Releaseankündigung enthält detaillierte Informationen zu Änderungen von Windows Forms für .NET 10:

Änderungen an der Zwischenablage

Windows Forms enthält neuen Code für die Zwischenablage-API. Die Zwischenablage wird so neu gestaltet, dass ihr Code für Windows Presentation Foundation (WPF) freigegeben werden kann. Beide Desktoptechnologien verwenden jetzt denselben Code und vereinheitlichen die Interaktion mit der Zwischenablage. Weitere Informationen finden Sie unter Windows Forms-Zwischenablage und DataObject-Änderungen in .NET 10.

.NET 9 hat BinaryFormatter eingestellt, das in einigen Zwischenablagevorgängen verwendet wird. Für diese Zwischenablagevorgänge müssen Sie sich für das Kompatibilitätspaket entscheiden oder den Vorgang umgehen. Um den Übergang zu erleichtern, wenn man von BinaryFormatter wegzieht, erklärt .NET 10 bestimmte Zwischenablagemethoden für veraltet und zeigt damit an, dass sie nicht mehr verwendet werden sollten. Weitere Methoden werden hinzugefügt, die bei der JSON-Serialisierung von Zwischenablagedaten helfen und die Notwendigkeit von BinaryFormatter umgehen.

Asynchrone Formulare

Windows Forms verfügt über vollständig integrierte asynchrone Formularunterstützung. Darüber hinaus verfügt die asynchrone Aufgabe jetzt über einen schwachen Verweis auf das Formular, wodurch reaktionsfähige UIs beim Verwalten mehrerer Fenster aktiviert werden.

Windows Forms für .NET 9 hat neue Methoden eingeführt, um das Anzeigen von Formularen und Dialogfeldern asynchron zu unterstützen, aber in einem Opt-In-Vorschaumodus, in dem Sie Compilerfehler WFO5002 unterdrücken mussten, um das Feature zu verwenden. Dieser Compilerfehler wird nicht mehr mit .NET 10 ausgelöst.

Die folgenden APIs gelten nicht mehr als experimentell:

Individuelle Designer-Verbesserungen

Mehrere UITypeEditor-Typen wurden von .NET Framework portiert, darunter ToolStripCollectionEditor und mehrere Editoren, die im Zusammenhang mit dem DataGridView-Steuerelement stehen. Diese Editoren sind jetzt durch das PropertyGrid und das Windows Forms Designer-Aktionen-Panel auffindbar.

SnapLines wurden für benutzerdefinierte Designer korrigiert.

Dunkler Modus

Windows Forms verfügt über vollständig integrierte Unterstützung für den dunklen Modus.

Windows Forms für .NET 9 hat eine vorläufige visuelle Gestaltung im dunklen Modus eingeführt, die jedoch nur in einem Opt-in-Vorschau-Modus verfügbar ist, in dem Sie den Compilerfehler WFO5001 unterdrücken mussten, um die Funktion zu nutzen. Dieses Feature wird ab .NET 10 nicht mehr durch diesen Compilerfehler geschützt.

Die Application.SetColorMode(SystemColorMode) API gilt nicht mehr als experimentell.

Klärung der Verwendung von ControlStyles ApplyThemingImplicitly

Steuerelemente folgen dem Farbmodus der Anwendung, der auf dunkel oder hell festgelegt ist. Es kann jedoch vorkommen, dass Sie eigene Steuerelemente verfassen und zeichnen, aber vorhandene allgemeine Win32-Steuerelemente verwenden, z. B. die Bildlaufleiste. Es sei denn, Sie aktivieren das Thema, bevor die CreateParams Eigenschaft gelesen wird, bleiben diese Steuerelemente hellfarben. Es kann auch vorkommen, dass Sie ein Steuerelement erben, das bereits dem Design folgt, und Sie möchten dies deaktivieren, damit Sie die Zeichnung vollständig steuern, z. B. mit einer Schaltfläche.

Unabhängig von Ihrem Anwendungsfall überschreiben Sie die Control.CreateParams-Eigenschaft und rufen Sie SetStyle(ControlStyles.ApplyThemingImplicitly, true) (Opt-in) oder SetStyle(ControlStyles.ApplyThemingImplicitly, false) (Opt-out) auf, bevor die Parameter aus der Basisklasse gelesen werden. Sie können diese Formatvorlage nicht im Konstruktor festlegen. Der Basiskonstruktor liest die CreateParams-Eigenschaft aus, bevor er Ihren Konstruktor aufruft. Der folgende Codeausschnitt zeigt, wie Sie sich anmelden:

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

Fehlerkorrekturen

Hier sind einige der in Windows Forms für .NET 10 behobenen Fehler:

  • Wenn der DataGridView im Bearbeitungsmodus war, während das Hosting-Dialogfeld geschlossen wurde, würde InvalidOperationException auslösen. Der Fehler, der dies verursacht hat, wurde behoben.
  • Compilerfehler WFO1000 wurde verbessert, um falsche Positivergebnisse im Zusammenhang mit Schnittstellen, die von IComponent abgeleitet sind, zu reduzieren.
  • Es wurde eine Regression behoben, bei der PrinterSettings.DefaultPageSettings.Color einen falschen Wert zurückgab.
  • Auflösen eines Speicherverlusts in der MSHTML-Komponente .

Zugänglichkeit

Verbesserte NVDA-Sprachausgabeunterstützung.

Codebereinigung

Veraltete .NET-Runtime und unnötige Paketverweise entfernt. Der Code-Stil wurde bereinigt, um Warnungen zu beseitigen und die Codequalität zu verbessern.

ScreenCaptureMode-API

Es wurde eine neue API eingeführt, um zu verhindern, dass Bildschirmaufnahmeanwendungen (die die Windows-API verwenden) ein Formular erfassen. Dieses Feature ist nützlich, um vertrauliche Informationen, z. B. Benutzernamen, Benutzer-IDs oder Kennwörter, vor einem Verlust zu schützen.

Der Form.ScreenCaptureMode Wert wird auf einen der folgenden Werte festgelegt, um das Erfassungsverhalten zu steuern:

  • Allow—(Standard) Ermöglicht die Erfassung des Formulars.
  • HideContent– Das Formular wird beim Erfassen abgeblendet angezeigt.
  • HideWindow– Weichzeichnen des Formulars beim Erfassen. (Erfordert Windows 10 20H1, Version 2004 oder höher.)

Verbesserungen am Analysator

Vorhandene Analysatoren wurden fein abgestimmt, um falsch positive Ergebnisse zu reduzieren.

Neue Analysegeräte wurden hinzugefügt: