Windows Forms advances in .NET 6 but still needs work
- 24 November, 2021 06:00
The runtime for Windows Forms, Microsoft’s UI framework for building Windows desktop applications, was spruced up with the recent release of .NET 6.0, although high-DPI and scaling issues remain to be resolved for the application.
In a bulletin on Windows Forms improvements published on November 16, Microsoft said it had been working through the “high DPI space” trying to get Windows Forms applications to properly support PerMonitorV2 mode, a DPI awareness mode that allows applications to immediately render correctly whenever the DPI changes.
PerMonitorV2 support has been a challenging undertaking and “sadly, we couldn’t achieve as much as we hoped,” Igor Velikorossov, software engineer for Windows Forms at Microsoft, said. But progress has been made in the .NET 6 release, with support for creating controls in the same DPI awareness as the application, and correct scaling of
ContainerControl and MDI child windows in PerMonitorV2 mode in most scenarios.
Microsoft cited a number of other changes for Windows Forms in .NET 6.0, which was released on November 8, which includes a more streamlined Windows Forms application bootstrap that allows sharing of configuration information between the runtime and the designer during development.
Also for application bootstrapping, Visual Basic in .NET 6.0 introduces a new application event,
ApplyApplicationDefaults, to define application-wide settings in the typical Visual Basic way. Also, designer support for the default font configured via MSBuild properties is coming in the near future.
Meanwhile, templates have been updated for C# to support
global using directives, file-scoped namespaces, and nullable reference types. For accessibility, there is improved support for assistive technology and porting has been completed for missing designers and designer-related infrastructure to enable building a general purpose designer.
In addition, new overloads have been implemented for
Control.BeginInvoke() methods that take
Func<T> and allow writing of more modern and more concise code.