Новые возможности .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 по умолчанию. Благодаря новой функции начальной загрузки приложения визуальный конструктор точно отражает шрифт по умолчанию. Кроме того, визуальный конструктор учитывает шрифт по умолчанию, заданный в файле проекта.
Дополнительные конструкторы среды выполнения
В .NET 6 добавлены конструкторы, существовавшие в .NET Framework и позволяющие построить конструктор общего назначения, например, конструктор отчетов:
- System.ComponentModel.Design.ComponentDesigner
- System.Windows.Forms.Design.ButtonBaseDesigner
- System.Windows.Forms.Design.ComboBoxDesigner
- System.Windows.Forms.Design.ControlDesigner
- System.Windows.Forms.Design.DocumentDesigner
- System.Windows.Forms.Design.DocumentDesigner
- System.Windows.Forms.Design.FormDocumentDesigner
- System.Windows.Forms.Design.GroupBoxDesigner
- System.Windows.Forms.Design.LabelDesigner
- System.Windows.Forms.Design.ListBoxDesigner
- System.Windows.Forms.Design.ListViewDesigner
- System.Windows.Forms.Design.MaskedTextBoxDesigner
- System.Windows.Forms.Design.PanelDesigner
- System.Windows.Forms.Design.ParentControlDesigner
- System.Windows.Forms.Design.ParentControlDesigner
- System.Windows.Forms.Design.PictureBoxDesigner
- System.Windows.Forms.Design.RadioButtonDesigner
- System.Windows.Forms.Design.RichTextBoxDesigner
- System.Windows.Forms.Design.ScrollableControlDesigner
- System.Windows.Forms.Design.ScrollableControlDesigner
- System.Windows.Forms.Design.TextBoxBaseDesigner
- System.Windows.Forms.Design.TextBoxDesigner
- System.Windows.Forms.Design.ToolStripDesigner
- System.Windows.Forms.Design.ToolStripDropDownDesigner
- System.Windows.Forms.Design.ToolStripItemDesigner
- System.Windows.Forms.Design.ToolStripMenuItemDesigner
- System.Windows.Forms.Design.TreeViewDesigner
- System.Windows.Forms.Design.UpDownBaseDesigner
- System.Windows.Forms.Design.UserControlDocumentDesigner
Улучшения высокого разрешения для PerMonitorV2
Улучшена отрисовка с использованием PerMonitorV2 с высоким разрешением:
Элементы управления создаются с тем же значением разрешения, что и приложение.
Элементы управления контейнерами и дочерние окна MDI улучшили поведение масштабирования.
Например, в .NET 5 перемещение приложения Windows Forms с монитора с масштабированием в 200 % на монитор с масштабированием в 100 % приведет к смещению элементов управления. Это поведение значительно улучшилось в .NET 6:
Новые интерфейсы API
- System.Windows.Forms.Application.SetDefaultFont
- System.Windows.Forms.Control.IsAncestorSiteInDesignMode
- System.Windows.Forms.ProfessionalColors.StatusStripBorder
- System.Windows.Forms.ProfessionalColorTable.StatusStripBorder
Новые API Visual Basic
- Microsoft.VisualBasic.ApplicationServices.ApplyApplicationDefaultsEventArgs
- Microsoft.VisualBasic.ApplicationServices.ApplyApplicationDefaultsEventHandler
- Microsoft.VisualBasic.ApplicationServices.ApplyApplicationDefaultsEventArgs.MinimumSplashScreenDisplayTime
- Microsoft.VisualBasic.ApplicationServices.ApplyApplicationDefaultsEventArgs.MinimumSplashScreenDisplayTime
- Microsoft.VisualBasic.ApplicationServices.ApplyApplicationDefaultsEventArgs.Font
- Microsoft.VisualBasic.ApplicationServices.ApplyApplicationDefaultsEventArgs.Font
- Microsoft.VisualBasic.ApplicationServices.ApplyApplicationDefaultsEventArgs.HighDpiMode
- Microsoft.VisualBasic.ApplicationServices.ApplyApplicationDefaultsEventArgs.HighDpiMode
- Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.ApplyApplicationDefaults
- Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.HighDpiMode
- Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.HighDpiMode
Обновленные API
System.Windows.Forms.Control.Invokeтеперь принимает System.Action и System.Func<TResult> в качестве входных параметров.
System.Windows.Forms.Control.BeginInvoke теперь принимает System.Action в качестве входного параметра.
В System.Windows.Forms.DialogResult включены следующие члены:
TryAgain
Continue
System.Windows.Forms.Form имеет новое свойство MdiChildrenMinimizedAnchorBottom.
В System.Windows.Forms.MessageBoxButtons включен следующий член:
CancelTryContinue
В System.Windows.Forms.MessageBoxDefaultButton включен следующий член:
Button4
В System.Windows.Forms.LinkClickedEventArgs теперь есть новый конструктор и включены следующие свойства:
В System.Windows.Forms.NotifyIcon.Text теперь есть ограничение в 127 символов (было 63).
Улучшенная доступность
Улучшена работа шаблонов модели автоматизации пользовательского интерфейса Майкрософт за счет инструментов специальных возможностей, таких как экранный диктор и Jaws.
См. также
.NET Desktop feedback
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по