Freigeben über


Neuerungen in Windows Forms für .NET 6

In diesem Artikel werden einige der neuen Features und Verbesserungen von Windows Forms in .NET 6 beschrieben.

Es gibt einige wesentliche Änderungen, die Sie bei der Migration von .NET Framework zu .NET 6 beachten sollten. Weitere Informationen finden Sie unter Breaking Changes in Windows Forms.

Aktualisierte Vorlagen für C#

In .NET 6 wurden viele Änderungen an den Standardkonsolenanwendungsvorlagen eingeführt. Im Einklang mit diesen Änderungen wurden die Windows Forms-Vorlagen für C# aktualisiert, um global using-Anweisungen, Dateibereichsnamespaces und Nullwerte zulassende Verweistypen standardmäßig zu aktivieren.

Ein Feature der neuen C#-Vorlagen, das nicht in Windows Forms übernommen wurde, sind Top-Level-Anweisungen. Die typische Windows Forms-Anwendung erfordert das [STAThread]-Attribut und besteht aus mehreren Typen, die auf mehrere Dateien (z. B. die Designercodedateien) verteilt sind, sodass die Verwendung von Top-Level-Anweisungen nicht sinnvoll ist.

Neuer Anwendungsbootstrapcode

Die Vorlagen, mit denen eine neue Windows Forms-Anwendung generiert wird, erstellen eine Main-Methode, die als Einstiegspunkt für Ihre Anwendung dient, wenn diese ausgeführt wird. Diese Methode enthält Code, der Windows Forms konfiguriert und das erste Formular anzeigt, das als Bootstrapcode bezeichnet wird:

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

In .NET 6 wurden diese Vorlagen so geändert, dass sie den neuen Bootstrapcode verwenden, der von der ApplicationConfiguration.Initialize-Methode aufgerufen wird.

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

Diese Methode wird automatisch zur Kompilierzeit generiert und enthält den Code zum Konfigurieren von Windows Forms. Die Projektdatei kann diese Einstellungen jetzt auch steuern, und Sie müssen sie nicht mehr unbedingt im Code konfigurieren. Die generierte Methode sieht beispielsweise in etwa wie der folgenden Code aus:

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

Der neue Bootstrapcode wird von Visual Studio verwendet, um den Windows Forms-Designer in Visual Studio zu konfigurieren. Wenn Sie die Verwendung des neuen Bootstrapcodes deaktivieren, indem Sie den alten Code wiederherstellen und die ApplicationConfiguration.Initialize-Methode umgehen, ignoriert der Windows Forms-Designer in Visual Studio die von Ihnen festgelegten Bootstrapeinstellungen.

Die in der Initialize-Methode generierten Einstellungen werden von der Projektdatei gesteuert.

Anwendungseinstellungen auf Projektebene

Zur Ergänzung des neuen Anwendungs-Bootstrap-Features von Windows Forms sollten einige -Einstellungen, die zuvor im Startcode der Anwendung festgelegt wurden, in der Projektdatei gesetzt werden. Mit der Projektdatei können die folgenden Anwendungseinstellungen konfiguriert werden:

Projekteinstellung Standardwert Entsprechende API
ApplicationVisualStyles true Application.EnableVisualStyles
ApplicationUseCompatibleTextRendering false Application.SetCompatibleTextRenderingDefault
ApplicationHighDpiMode SystemAware Application.SetHighDpiMode
ApplicationDefaultFont Segoe UI, 9pt Application.SetDefaultFont

Im folgenden Beispiel ist eine Projektdatei dargestellt, die diese anwendungsbezogenen Eigenschaften festlegt:

<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>

Der Windows Forms-Designer in Visual Studio verwendet diese Einstellungen. Weitere Informationen finden Sie im Abschnitt Verbesserungen des Visual Studio-Designers.

Ändern der Standardschriftart

In Windows Forms in .NET Core 3.0 wurde eine neue Standardschriftart für Windows Forms eingeführt: Segoe UI, 9pt. Diese Schriftart entspricht besser den Richtlinien für die Benutzerfreundlichkeit (User Experience, UX) von Windows. .NET Framework verwendet jedoch Microsoft Sans Serif, 8.25pt als Standardschriftart. Diese Änderung erschwerte es einigen Kunden, ihre großen Anwendungen, die ein pixelgenaues Layout nutzten, von .NET Framework zu .NET zu migrieren. Die einzige Möglichkeit, die Schriftart für die gesamte Anwendung zu ändern, bestand darin, jedes Formular im Projekt zu bearbeiten und die Font-Eigenschaft auf eine alternative Schriftart festzulegen.

Die Standardschriftart kann jetzt auf zwei Arten festgelegt werden:

  • Legen Sie die Standardschriftart in der Projektdatei fest, die vom Anwendungsbootstrapcode verwendet werden soll:

    Von Bedeutung

    Dies ist die bevorzugte Methode. Durch die Verwendung des Projekts zum Konfigurieren des neuen Anwendungsbootstrapsystems kann Visual Studio diese Einstellungen im Designer verwenden.

    Im folgenden Beispiel wird in der Projektdatei Windows Forms so konfiguriert, dass die gleiche Schriftart wie in .NET Framework verwendet wird.

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

-oder-

  • Rufen Sie die Application.SetDefaultFont-API auf die alte Weise auf (aber ohne Designerunterstützung):

    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());
        }
    }
    

Verbesserungen des Visual Studio-Designers

Der Windows Forms-Designer in Visual Studio stellt jetzt die Standardschriftart richtig dar. In früheren Versionen von Windows Forms für .NET wurde die Schriftart Segoe UI im visuellen Designer nicht ordnungsgemäß angezeigt, und das Formular wurde mit der .NET Framework-Standardschriftart entworfen. Dank der neuen Anwendungs-Bootstrap-Funktion stellt der Visuelle Designer die Standardschriftart richtig dar. Darüber hinaus verwendet der visuelle Designer die in der Projektdatei festgelegte Standardschriftart.

Windows Forms-Designer verwendet die Standardschriftarteinstellung in Visual Studio

Weitere Runtime-Designer

Designer, die bereits in .NET Framework vorhanden waren und das Erstellen eines allgemeinen Designers (z. B. das Erstellen eines Berichts-Designers) ermöglicht haben, wurden zu .NET 6 hinzugefügt:

Verbesserungen für hohe DPI-Werte für PerMonitorV2

Das Rendering bei hohen DPI-Werten mit PerMonitorV2 wurde verbessert:

  • Steuerelemente werden mit der gleichen DPI-Awareness wie die Anwendung erstellt.

  • Containersteuerelemente und untergeordnete MDI-Fenster weisen ein verbessertes Skalierungsverhalten auf.

    In .NET 5 würde beispielsweise das Verschieben einer Windows Forms-App von einem Monitor mit einer Skalierung von 200 % auf einen Monitor mit einer Skalierung von 100 % zu falsch platzierten Steuerelementen führen. Dies wurde in .NET 6 erheblich verbessert:

    Verbesserungen bei hohen DPI-Werten in .NET 6 für Windows Forms

Neue APIs

Neue Visual Basic-APIs

Aktualisierte APIs

Verbesserte Barrierefreiheit

Muster der Microsoft-Benutzeroberflächenautomatisierung funktionieren mit Tools für Barrierefreiheit wie Narrator und Jaws besser.

Siehe auch