Novidades do .NET 6 (Windows Forms .NET)
Este artigo descreve alguns dos novos recursos e aprimoramentos do Windows Forms no .NET 6.
Há algumas alterações recentes que você deve estar ciente ao migrar do .NET Framework para o .NET 6. Para obter mais informações, consulte Alterações recentes no Windows Forms.
Modelos atualizados para C#
O .NET 6 introduziu muitas alterações nos modelos de aplicativo de console padrão. De acordo com essas alterações, os modelos do Windows Forms para C# foram atualizados para habilitar global using
diretivas, namespaces com escopo de arquivo e tipos de referência anuláveis por padrão.
Um recurso dos novos modelos C# que não foi levado adiante com o Windows Forms são as instruções de nível superior. O aplicativo Windows Forms típico requer o [STAThread]
atributo e consiste em vários tipos divididos em vários arquivos, como os arquivos de código do designer, portanto, usar instruções de nível superior não faz sentido.
Novo bootstrap de aplicativo
Os modelos que geram um novo aplicativo do Windows Forms criam um Main
método que serve como ponto de entrada para seu aplicativo quando ele é executado. Esse método contém código que configura o Windows Forms e exibe o primeiro formulário, conhecido como o código de bootstrap:
class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
No .NET 6, esses modelos foram modificados para usar o novo código de bootstrap, chamado pelo ApplicationConfiguration.Initialize
método.
class Program
{
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
}
}
Esse método é gerado automaticamente em tempo de compilação e contém o código para configurar o Windows Forms. O arquivo de projeto pode controlar essas configurações agora também, e você pode evitar configurá-lo no código. Por exemplo, o método gerado é semelhante ao seguinte código:
public static void Initialize()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.SetHighDpiMode(HighDpiMode.SystemAware);
}
O novo código de bootstrap é usado pelo Visual Studio para configurar o Windows Forms Visual Designer. Se você optar por não usar o novo código de bootstrap, restaurando o código antigo e ignorando o método, o ApplicationConfiguration.Initialize
Windows Forms Visual Designer não respeitará as configurações de bootstrap definidas.
As configurações geradas no Initialize
método são controladas pelo arquivo de projeto.
Configurações de aplicativo em nível de projeto
Para complementar o novo recurso de bootstrap do aplicativo do Windows Forms, algumas Application
configurações definidas anteriormente no código de inicialização do aplicativo devem ser definidas no arquivo de projeto. O arquivo de projeto pode definir as seguintes configurações do aplicativo:
Configuração do projeto | Valor padrão | API correspondente |
---|---|---|
ApplicationVisualStyles | true |
Application.EnableVisualStyles |
ApplicationUseCompatibleTextRendering | false |
Application.SetCompatibleTextRenderingDefault |
ApplicationHighDpiMode | SystemAware |
Application.SetHighDpiMode |
ApplicationDefaultFont | Segoe UI, 9pt |
Application.SetDefaultFont |
O exemplo a seguir demonstra um arquivo de projeto que define essas propriedades relacionadas ao aplicativo:
<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>
O Windows Forms Visual Designer usa essas configurações. Para obter mais informações, consulte a seção de aprimoramentos do designer do Visual Studio.
Alterar a fonte padrão
O Windows Forms no .NET Core 3.0 introduziu uma nova fonte padrão para o Windows Forms: Segoe UI, 9pt. Essa fonte se alinhava melhor às diretrizes de experiência do usuário (UX) do Windows. No entanto, o .NET Framework usa o Microsoft Sans Serif, 8.25pt como a fonte padrão. Essa alteração tornou mais difícil para alguns clientes migrar seus aplicativos grandes que utilizavam um layout perfeito de pixels do .NET Framework para o .NET. A única maneira de alterar a fonte de todo o aplicativo era editar todos os formulários no projeto, definindo a Font propriedade como uma fonte alternativa.
A fonte padrão agora pode ser definida de duas maneiras:
Defina a fonte padrão no arquivo de projeto a ser usada pelo código de bootstrap do aplicativo:
Importante
Esse é o caminho preferido. Usar o projeto para configurar o novo sistema de bootstrap do aplicativo permite que o Visual Studio use essas configurações no designer.
No exemplo a seguir, o arquivo de projeto configura o Windows Forms para usar a mesma fonte que o .NET Framework usa.
<Project Sdk="Microsoft.NET.Sdk"> <!-- other settings --> <PropertyGroup> <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont> </PropertyGroup> </Project>
- ou -
Chame a Application.SetDefaultFont API da maneira antiga (mas sem suporte de designer):
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()); } }
Aprimoramentos do designer do Visual Studio
O Windows Forms Visual Designer agora reflete com precisão a fonte padrão. As versões anteriores do Windows Forms para .NET não exibiam corretamente a fonte Segoe UI no Visual Designer e, na verdade, estavam criando o formulário com a fonte padrão do .NET Framework. Devido ao novo recurso de bootstrap do aplicativo, o Visual Designer reflete com precisão a fonte padrão. Além disso, o Visual Designer respeita a fonte padrão definida no arquivo de projeto.
Mais designers de tempo de execução
Os designers que existiam no .NET Framework e habilitavam a criação de um designer de uso geral, por exemplo, criando um designer de relatório, foram adicionados ao .NET 6:
- 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
Melhorias de alto DPI para PerMonitorV2
A renderização de alto DPI com PerMonitorV2 foi melhorada:
Os controles são criados com o mesmo reconhecimento de DPI que o aplicativo.
Os controles de contêiner e as janelas filhas MDI melhoraram os comportamentos de dimensionamento.
Por exemplo, no .NET 5, mover um aplicativo do Windows Forms de um monitor com 200% de dimensionamento para um monitor com 100% de dimensionamento resultaria em controles no local incorreto. Isso foi muito melhorado no .NET 6:
Novas APIs
- System.Windows.Forms.Application.SetDefaultFont
- System.Windows.Forms.Control.IsAncestorSiteInDesignMode
- System.Windows.Forms.ProfessionalColors.StatusStripBorder
- System.Windows.Forms.ProfessionalColorTable.StatusStripBorder
Novas APIs do 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
APIs atualizadas
System.Windows.Forms.Control.Invoke agora aceita System.Action e System.Func<TResult> como parâmetros de entrada.
System.Windows.Forms.Control.BeginInvoke agora aceita System.Action como um parâmetro de entrada.
System.Windows.Forms.DialogResult é estendido com os seguintes membros:
TryAgain
Continue
System.Windows.Forms.Form tem um novo imóvel: MdiChildrenMinimizedAnchorBottom
System.Windows.Forms.MessageBoxButtons é estendido com o seguinte membro:
CancelTryContinue
System.Windows.Forms.MessageBoxDefaultButton é estendido com o seguinte membro:
Button4
System.Windows.Forms.LinkClickedEventArgs tem agora um novo construtor e estendido com as seguintes propriedades:
System.Windows.Forms.NotifyIcon.Text agora está limitado a 127 caracteres (de 63).
Acessibilidade do aprimorada
Os padrões de automação da interface do usuário da Microsoft funcionam melhor com ferramentas de acessibilidade como o Narrador e o Jaws.
Confira também
.NET Desktop feedback
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de