Compartilhar via


Novidades no Windows Forms para .NET 10

Este artigo fornece uma visão geral de alto nível sobre as novidades com o Windows Forms (WinForms) no .NET 10. Para obter informações detalhadas, consulte os comunicados de lançamento. Use os comunicados de versão para obter uma visão geral de toda a versão do .NET 10. O restante das seções realça algumas das alterações mais importantes no Windows Forms.

O .NET 10 foi lançado em novembro de 2025.

Anúncios de Lançamento

Cada comunicado de versão fornece informações detalhadas sobre as alterações do Windows Forms para .NET 10:

Alterações na área de transferência

O Windows Forms está enviando um novo código para a API da área de transferência. A área de transferência foi redesenhada para que seu código possa ser compartilhado com o Windows Presentation Foundation (WPF). As duas tecnologias da área de trabalho agora compartilham o mesmo código e unificam a maneira como interagem com a área de transferência. Para obter mais informações, consulte as alterações no clipboard e no DataObject do Windows Forms no .NET 10.

.NET 9 obsoletou BinaryFormatter, que é usado em algumas operações de área de transferência. Essas operações de área de transferência exigiam que você aceitasse o pacote de compatibilidade ou contornasse a operação. Para facilitar a transição de BinaryFormatter, o .NET 10 está obsoleto em determinados métodos de área de transferência para indicar que não devem ser usados. Mais métodos estão sendo adicionados para ajudar na serialização JSON com dados da área de transferência, contornando a necessidade de BinaryFormatter.

Formulários assíncronos

O Windows Forms tem suporte a formulários assíncronos totalmente integrados. Além disso, a tarefa assíncrona agora tem uma referência fraca ao formulário, habilitando UIs responsivas ao gerenciar várias janelas.

O Windows Forms para .NET 9 introduziu novos métodos para dar suporte à exibição de formulários e caixas de diálogo de forma assíncrona, mas em um modo de visualização de aceitação em que você precisava suprimir o Erro do Compilador WFO5002 para usar o recurso. Esse erro do compilador não é mais disparado com o .NET 10.

As seguintes APIs não são mais consideradas experimentais:

Melhorias de design personalizado

Vários tipos de UITypeEditor foram portados do .NET Framework, incluindo ToolStripCollectionEditor e vários editores relacionados ao controle DataGridView. Esses editores agora são detectáveis pelo PropertyGrid e pelo painel Ações do Designer de Formulários do Windows.

Os SnapLines foram corrigidos para designers personalizados.

Modo escuro

O Windows Forms tem suporte totalmente integrado ao modo escuro.

O Windows Forms para .NET 9 introduziu um estilo visual preliminar para o modo escuro, mas em um modo de visualização opcional em que você precisava suprimir o Erro do Compilador WFO5001 para usar o recurso. Esse recurso não é mais protegido por trás desse erro do compilador começando com o .NET 10.

A Application.SetColorMode(SystemColorMode) API não é mais considerada experimental.

Esclarecimento sobre o uso do ControlStyles ApplyThemingImplicitly

Os controles seguem o modo de cor definido para o aplicativo, escuro ou claro. No entanto, pode haver um caso em que você está redigindo e desenhando seus próprios controles, mas usando controles comuns win32 existentes, como a barra de rolagem. Esses controles permanecem de cor clara, a menos que você opte por aplicar o tema antes que a CreateParams propriedade seja lida. Também pode haver um caso em que você herda um controle que já segue o tema e deseja recusar para controlar totalmente o desenho, como com um Botão.

Independentemente do caso de uso, sobrescreva a propriedade Control.CreateParams e chame SetStyle(ControlStyles.ApplyThemingImplicitly, true) (opt-in) ou SetStyle(ControlStyles.ApplyThemingImplicitly, false) (opt-out) antes que os parâmetros sejam lidos da classe base. Você não pode definir esse estilo em seu construtor. O construtor base lê a CreateParams propriedade antes de chamar o construtor. O trecho de código a seguir mostra como optar por participar:

public partial class CustomControl1 : Control
{
    protected override CreateParams CreateParams
    {
        get
        {
            // Set this style BEFORE base.CreateParams is created and returned.
            SetStyle(ControlStyles.ApplyThemingImplicitly, true);

            CreateParams cp = base.CreateParams;
            
            // Other logic
            return cp;
        }
    }

    // Base class constructor is going to read CreateParams property
    // before your constructor code runs.
    public CustomControl1()  
    {
        // At this point, CreateParams property is already read, you
        // can't set ApplyThemingImplicitly here.
        InitializeComponent();
    }
}
Public Class CustomControl1

    Protected Overrides ReadOnly Property CreateParams As CreateParams
        Get
            ' Set this style BEFORE base.CreateParams is created and returned.
            SetStyle(ControlStyles.ApplyThemingImplicitly, True)

            Dim cp As CreateParams = MyBase.CreateParams

            ' Other logic
            Return cp
        End Get
    End Property

    ' Base class constructor is going to read CreateParams property
    ' before your constructor code runs.
    Sub New()

        ' At this point, CreateParams property is already read, you
        ' can't set ApplyThemingImplicitly here.

        InitializeComponent()

    End Sub

End Class

Correções

Aqui estão alguns dos bugs corrigidos nos Windows Forms para .NET 10:

  • Se o DataGridView estivesse no modo de edição enquanto a caixa de diálogo de hospedagem estava fechada, ocorreria uma exceção InvalidOperationException. O bug que causa isso foi corrigido.
  • O erro do compilador WFO1000 foi aprimorado para reduzir falsos positivos relacionados a interfaces que derivam de IComponent.
  • Correção de uma regressão onde PrinterSettings.DefaultPageSettings.Color retorna um valor incorreto.
  • Resolvendo um vazamento de memória no componente MSHTML .

Acessibilidade

Suporte aprimorado ao leitor de tela NVDA.

Limpeza de código

Remoção do runtime preterido do .NET e das referências desnecessárias de pacotes. O estilo de código foi limpo para resolver avisos e melhorar a qualidade do código.

ScreenCaptureMode API

Uma nova API foi introduzida para impedir que aplicativos de captura de tela (que usam a API do Windows) capturem um formulário. Esse recurso é útil para proteger informações confidenciais, como nomes de usuário, IDs de usuário ou senhas, de serem vazadas.

O Form.ScreenCaptureMode valor é definido como um dos seguintes valores para controlar o comportamento de captura:

  • Allow—(Padrão) Permite que o formulário seja capturado.
  • HideContent— O formulário aparece apagado quando capturado.
  • HideWindow— Desfoca o formulário quando capturado. (Requer o Windows 10 20H1 versão 2004 ou superior.)

Melhorias do analisador

Os analisadores existentes foram ajustados para reduzir falsos positivos.

Novos analisadores foram adicionados: