Новые возможности .NET 6 (Windows Forms .NET)

В этой статье описываются некоторые новые функции и улучшения Windows Forms в .NET 6.

Появилось несколько критических изменений, которые следует учитывать при переходе с .NET Framework на .NET 6. Дополнительные сведения см. в разделе Критические изменения в Windows Forms.

Обновленные шаблоны для C#

В .NET 6 появилось много изменений в стандартных шаблонах консольных приложений. В соответствии с этими изменениями шаблоны Windows Forms для C# были обновлены, чтобы по умолчанию включить директивы global using, пространства имен в области файла и ссылочные типы, допускающие значение NULL.

Одной из функций новых шаблонов C#, которые не были перенесены с помощью Windows Forms, являются операторы верхнего уровня. Типичное приложение Windows Forms требует этот атрибут [STAThread] и состоит из нескольких типов, разделенных на несколько файлов, таких как файлы кода конструктора, поэтому использование операторов верхнего уровня не имеет смысла.

Начальная загрузка нового приложения

Шаблоны, создающие новое приложение Windows Forms, создают метод Main, который служит точкой входа для приложения при его запуске. Этот метод содержит код, который настраивает Windows Forms и отображает первую форму, известную как код начальной загрузки:

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

В .NET 6 эти шаблоны изменены для использования нового кода начальной загрузки, вызываемого методом ApplicationConfiguration.Initialize.

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

Этот метод автоматически создается во время компиляции и содержит код для настройки Windows Forms. Файл проекта также может управлять этими параметрами, и вы можете избежать его настройки в коде. Например, созданный метод выглядит примерно так:

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

Новый код начальной загрузки используется Visual Studio для настройки визуального конструктора Windows Forms. Если вы откажетесь от использования нового кода начальной загрузки, восстановив старый код и обойдя метод ApplicationConfiguration.Initialize, визуальный конструктор Windows Forms не будет учитывать установленные вами параметры начальной загрузки.

Параметры, созданные в методе Initialize, управляются файлом проекта.

Параметры приложения на уровне проекта

Чтобы дополнить новую функцию начальной загрузки приложения Windows Forms, в файле проекта необходимо задать несколько параметров Application, заданных ранее в коде запуска приложения. Файл проекта может настроить следующие параметры приложения:

Параметр проекта Default value Соответствующий API
ApplicationVisualStyles true Application.EnableVisualStyles
ApplicationUseCompatibleTextRendering false Application.SetCompatibleTextRenderingDefault
ApplicationHighDpiMode SystemAware Application.SetHighDpiMode
ApplicationDefaultFont Segoe UI, 9pt Application.SetDefaultFont

В следующем примере показан файл проекта, который задает следующие свойства, связанные с приложением:

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

Визуальный конструктор Windows Forms использует эти параметры. Дополнительные сведения см. в разделе Улучшения конструктора Visual Studio.

Изменение шрифта по умолчанию

В Windows Forms в .NET Core 3.0 появился новый шрифт по умолчанию для Windows Forms: Segoe UI, 9pt. Этот шрифт лучше соответствует рекомендациям по пользовательскому интерфейсу Windows. Но .NET Framework использует Microsoft Sans Serif, 8.25pt в качестве шрифта по умолчанию. Это изменение усложнило для некоторых клиентов перенос своих больших приложений, использующих макет с точностью до пикселя, с .NET Framework на .NET. Единственный способ изменить шрифт для всего приложения — отредактировать каждую форму в проекте, установив для свойства Font альтернативный шрифт.

Теперь шрифт по умолчанию можно задать двумя способами:

  • Задайте шрифт по умолчанию в файле проекта, который будет использоваться кодом начальной загрузки приложения:

    Важно!

    Это предпочтительный способ. Использование проекта для настройки новой системы начальной загрузки приложения позволяет Visual Studio использовать эти параметры в конструкторе.

    В следующем примере файл проекта настраивает Windows Forms для использования того же шрифта, что и .NET Framework.

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

- или -

  • Вызовите API Application.SetDefaultFont старым способом (но без поддержки конструктора):

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

Улучшения конструктора Visual Studio

Теперь визуальный конструктор Windows Forms точно отражает шрифт по умолчанию. Предыдущие версии Windows Forms для .NET неправильно отображали шрифт Segoe UI в Visual Designer и фактически разрабатывали форму с использованием шрифта .NET Framework по умолчанию. Благодаря новой функции начальной загрузки приложения визуальный конструктор точно отражает шрифт по умолчанию. Кроме того, визуальный конструктор учитывает шрифт по умолчанию, заданный в файле проекта.

Windows Forms designer is using the default font setting in Visual Studio

Дополнительные конструкторы среды выполнения

В .NET 6 добавлены конструкторы, существовавшие в .NET Framework и позволяющие построить конструктор общего назначения, например, конструктор отчетов:

Улучшения высокого разрешения для PerMonitorV2

Улучшена отрисовка с использованием PerMonitorV2 с высоким разрешением:

  • Элементы управления создаются с тем же значением разрешения, что и приложение.

  • Элементы управления контейнерами и дочерние окна MDI улучшили поведение масштабирования.

    Например, в .NET 5 перемещение приложения Windows Forms с монитора с масштабированием в 200 % на монитор с масштабированием в 100 % приведет к смещению элементов управления. Это поведение значительно улучшилось в .NET 6:

    High DPI improvements in .NET 6 for Windows Forms

Новые интерфейсы API

Новые API Visual Basic

Обновленные API

Улучшенная доступность

Улучшена работа шаблонов модели автоматизации пользовательского интерфейса Майкрософт за счет инструментов специальных возможностей, таких как экранный диктор и Jaws.

См. также