Alterações recentes no Windows Forms para .NET Core 3.0 e 3.1
O suporte a Windows Forms foi adicionado ao .NET Core na versão 3.0. Este artigo lista as alterações de quebra para Windows Forms pela versão .NET na qual eles foram introduzidos. Se você estiver atualizando um aplicativo do Windows Forms do .NET Framework ou de uma versão anterior do .NET Core (3.0 ou posterior), este artigo se aplica a você.
As seguintes alterações estão documentadas nesta página:
.NET Core 3.1
Controles removidos
A partir do .NET Core 3.1, alguns controles do Windows Forms não estão mais disponíveis.
Alterar a descrição
A partir do .NET Core 3.1, vários controles do Windows Forms não estão mais disponíveis. Controles de substituição que têm melhor design e suporte foram introduzidos no .NET Framework 2.0. Os controles preteridos foram removidos anteriormente das caixas de ferramentas do designer, mas ainda estavam disponíveis para serem usados.
Os seguintes tipos não estão mais disponíveis:
- ContextMenu
- DataGrid
- DataGrid.HitTestType
- DataGridBoolColumn
- DataGridCell
- DataGridColumnStyle
- DataGridLineStyle
- DataGridParentRowsLabelStyle
- DataGridPreferredColumnWidthTypeConverter
- DataGridTableStyle
- DataGridTextBox
- DataGridTextBoxColumn
- GridColumnStylesCollection
- GridTablesFactory
- GridTableStylesCollection
- IDataGridEditingService
- IMenuEditorService
- MainMenu
- Menu
- Menu.MenuItemCollection
- MenuItem
- ToolBar
- ToolBarAppearance
- ToolBarButton
- ToolBar.ToolBarButtonCollection
- ToolBarButtonClickEventArgs
- ToolBarButtonStyle
- ToolBarTextAlign
Versão introduzida
3.1
Ação recomendada
Cada controlo removido tem um controlo de substituição recomendado. Veja a seguinte tabela:
Controle removido (API) | Substituição recomendada | APIs associadas que são removidas |
---|---|---|
ContextMenu | ContextMenuStrip | |
DataGrid | DataGridView | DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType |
Menu principal | MenuStrip | |
Menu | ToolStripDropDown, ToolStripDropDownMenu | MenuItemCollection |
MenuItem | ToolStripMenuItem | |
Barra de ferramentas | Tira de ferramentas | ToolBarAppearance |
ToolBarButton | ToolStripButton | ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign |
Categoria
Windows Forms
APIs afetadas
- System.Windows.Forms.ContextMenu
- System.Windows.Forms.GridColumnStylesCollection
- System.Windows.Forms.GridTablesFactory
- System.Windows.Forms.GridTableStylesCollection
- System.Windows.Forms.IDataGridEditingService
- System.Windows.Forms.MainMenu
- System.Windows.Forms.Menu
- System.Windows.Forms.Menu.MenuItemCollection
- System.Windows.Forms.MenuItem
- System.Windows.Forms.ToolBar
- System.Windows.Forms.ToolBar.ToolBarButtonCollection
- System.Windows.Forms.ToolBarAppearance
- System.Windows.Forms.ToolBarButton
- System.Windows.Forms.ToolBarButtonClickEventArgs
- System.Windows.Forms.ToolBarButtonStyle
- System.Windows.Forms.ToolBarTextAlign
- System.Windows.Forms.DataGrid
- System.Windows.Forms.DataGrid.HitTestType
- System.Windows.Forms.DataGridBoolColumn
- System.Windows.Forms.DataGridCell
- System.Windows.Forms.DataGridColumnStyle
- System.Windows.Forms.DataGridLineStyle
- System.Windows.Forms.DataGridParentRowsLabelStyle
- System.Windows.Forms.DataGridPreferredColumnWidthTypeConverter
- System.Windows.Forms.DataGridTableStyle
- System.Windows.Forms.DataGridTextBox
- System.Windows.Forms.DataGridTextBoxColumn
- System.Windows.Forms.Design.IMenuEditorService
Evento CellFormatting não gerado se a dica de ferramenta for mostrada
A DataGridView agora mostra o texto de uma célula e dicas de ferramentas de erro quando pairado por um mouse e quando selecionado através do teclado. Se uma dica de ferramenta for mostrada, o DataGridView.CellFormatting evento não será gerado.
Alterar a descrição
Antes do .NET Core 3.1, um DataGridView que tinha a ShowCellToolTips propriedade definida para true
mostrar uma dica de ferramenta para o texto de uma célula e erros quando a célula era pairada por um mouse. As dicas de ferramentas não eram mostradas quando uma célula era selecionada através do teclado (por exemplo, usando a tecla Tab, teclas de atalho ou navegação por seta). Se o usuário editou uma célula e, enquanto a DataGridView ainda estava no modo de edição, passou o mouse sobre uma célula que não tinha a ToolTipText propriedade definida, um CellFormatting evento foi gerado para formatar o texto da célula para exibição na célula.
Para atender aos padrões de acessibilidade, a partir do .NET Core 3.1, um DataGridView que tem a ShowCellToolTips propriedade definida para true
mostrar dicas de ferramentas para o texto de uma célula e erros não apenas quando a célula é focalizada, mas também quando é selecionada através do teclado. Como consequência dessa alteração, o evento não é gerado quando as CellFormatting células que não têm a ToolTipText propriedade definida são pairadas enquanto o DataGridView está no modo de edição. O evento não é gerado porque o conteúdo da célula focalizada é mostrado como uma dica de ferramenta em vez de ser exibido na célula.
Versão introduzida
3.1
Ação recomendada
Refatore qualquer código que dependa do CellFormatting evento enquanto o DataGridView está no modo de edição.
Categoria
Windows Forms
APIs afetadas
Nenhuma
.NET Core 3.0
Fonte de controle padrão alterada para Segoe UI 9 pt
Alterar a descrição
No .NET Framework, a Control.DefaultFont propriedade foi definida como Microsoft Sans Serif 8.25 pt
. A imagem a seguir mostra uma janela que usa a fonte padrão.
A partir do .NET Core 3.0, a fonte padrão é definida como Segoe UI 9 pt
(a mesma fonte que SystemFonts.MessageBoxFont). Como resultado dessa alteração, os formulários e controles são dimensionados cerca de 27% maiores para dar conta do tamanho maior da nova fonte padrão. Por exemplo:
Essa alteração foi feita para se alinhar com as diretrizes de experiência do usuário (UX) do Windows.
Versão introduzida
3.0
Ação recomendada
Devido à alteração no tamanho dos formulários e controles, certifique-se de que seu aplicativo seja renderizado corretamente.
Para manter a fonte original para um único formulário, defina sua fonte padrão como Microsoft Sans Serif 8.25 pt
. Por exemplo:
public MyForm()
{
InitializeComponent();
Font = new Font(new FontFamily("Microsoft Sans Serif"), 8.25f);
}
Ou, você pode alterar a fonte padrão para um aplicativo inteiro de uma das seguintes maneiras:
Definindo a
ApplicationDefaultFont
propriedade MSBuild como "Microsoft Sans Serif, 8.25pt". Essa é a técnica preferida porque permite que o Visual Studio use as novas configurações no designer.<PropertyGroup> <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont> </PropertyGroup>
Ligando para Application.SetDefaultFont(Font).
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()); } }
Categoria
- Windows Forms
APIs afetadas
Nenhum.
Modernização do FolderBrowserDialog
O FolderBrowserDialog controle foi alterado em aplicativos Windows Forms para .NET Core.
Alterar a descrição
No .NET Framework, formulários do Windows usa a seguinte caixa de diálogo para o FolderBrowserDialog controle:
No .NET Core 3.0, o Windows Forms usa um controle baseado em COM mais recente que foi introduzido no Windows Vista:
Versão introduzida
3.0
Ação recomendada
A caixa de diálogo será atualizada automaticamente.
Se desejar manter a caixa de diálogo original, defina a FolderBrowserDialog.AutoUpgradeEnabled propriedade como false
antes de mostrá-la, conforme ilustrado pelo seguinte fragmento de código:
var dialog = new FolderBrowserDialog();
dialog.AutoUpgradeEnabled = false;
dialog.ShowDialog();
Categoria
Windows Forms
APIs afetadas
SerializableAttribute removido de alguns tipos de Windows Forms
O SerializableAttribute foi removido de algumas classes do Windows Forms que não têm cenários de serialização binária conhecidos.
Alterar a descrição
Os seguintes tipos são decorados com o SerializableAttribute no .NET Framework, mas o atributo foi removido no .NET Core:
System.InvariantComparer
- System.ComponentModel.Design.ExceptionCollection
- System.ComponentModel.Design.Serialization.CodeDomSerializerException
System.ComponentModel.Design.Serialization.CodeDomComponentSerializationService.CodeDomSerializationStore
- System.Drawing.Design.ToolboxItem
System.Resources.ResXNullRef
System.Resources.ResXDataNode
System.Resources.ResXFileRef
- System.Windows.Forms.Cursor
System.Windows.Forms.NativeMethods.MSOCRINFOSTRUCT
System.Windows.Forms.NativeMethods.MSG
Historicamente, esse mecanismo de serialização tem tido sérias preocupações de manutenção e segurança. Manter SerializableAttribute
em tipos significa que esses tipos devem ser testados para alterações de serialização de versão para versão e, potencialmente, alterações de serialização de estrutura para estrutura. Isso dificulta a evolução desses tipos e pode ser caro para manter. Esses tipos não têm cenários de serialização binária conhecidos, o que minimiza o impacto da remoção do atributo.
Para obter mais informações, consulte Serialização binária.
Versão introduzida
3.0
Ação recomendada
Atualize qualquer código que possa depender de esses tipos serem marcados como serializáveis.
Categoria
Windows Forms
APIs afetadas
- Nenhuma
Opção de compatibilidade AllowUpdateChildControlIndexForTabControls não suportada
A Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
opção de compatibilidade é suportada no Windows Forms no .NET Framework 4.6 e versões posteriores, mas não é suportada no .NET Core ou .NET 5.0 e posterior.
Alterar a descrição
No .NET Framework 4.6 e versões posteriores, selecionar uma guia reordena sua coleção de controle. A Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
opção de compatibilidade permite que um aplicativo ignore essa reordenação quando esse comportamento é indesejável.
No .NET Core e .NET 5.0 e posterior, a opção não é suportada Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
.
Versão introduzida
3.0
Ação recomendada
Remova o interruptor. O switch não é suportado e nenhuma funcionalidade alternativa está disponível.
Categoria
Windows Forms
APIs afetadas
- Nenhuma
A opção de compatibilidade DomainUpDown.UseLegacyScrolling não é suportada
A Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
opção de compatibilidade, que foi introduzida no .NET Framework 4.7.1, não é suportada no Windows Forms no .NET Core ou .NET 5.0 e posterior.
Alterar a descrição
A partir do .NET Framework 4.7.1, a opção de compatibilidade permitiu que os Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
desenvolvedores optassem por não participar de ações independentes DomainUpDown.DownButton()DomainUpDown.UpButton() . O switch restaurou o comportamento herdado, no qual o é ignorado se o DomainUpDown.UpButton() texto de contexto estiver presente, e o desenvolvedor é obrigado a usar DomainUpDown.DownButton() a ação no controle antes da DomainUpDown.UpButton() ação. Para obter mais informações, consulte <Elemento AppContextSwitchOverrides>.
No .NET Core e .NET 5.0 e posterior, a opção não é suportada Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
.
Versão introduzida
3.0
Ação recomendada
Remova o interruptor. O switch não é suportado e nenhuma funcionalidade alternativa está disponível.
Categoria
Windows Forms
APIs afetadas
Opção de compatibilidade DoNotLoadLatestRichEditControl não suportada
A Switch.System.Windows.Forms.UseLegacyImages
opção de compatibilidade, que foi introduzida no .NET Framework 4.7.1, não é suportada no Windows Forms no .NET Core ou .NET 5.0 e posterior.
Alterar a descrição
No .NET Framework 4.6.2 e versões anteriores, o RichTextBox controle instancia o controle Win32 RichEdit v3.0 e, para aplicativos destinados ao .NET Framework 4.7.1, o controle instancia o RichTextBox RichEdit v4.1 (em msftedit.dll). A Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl
opção de compatibilidade foi introduzida para permitir que os aplicativos destinados ao .NET Framework 4.7.1 e versões posteriores desativem o novo controle RichEdit v4.1 e usem o antigo controle RichEdit v3.
No .NET Core e .NET 5.0 e versões posteriores, o switch não é suportado Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl
. Somente novas versões do RichTextBox controle são suportadas.
Versão introduzida
3.0
Ação recomendada
Remova o interruptor. O switch não é suportado e nenhuma funcionalidade alternativa está disponível.
Categoria
Windows Forms
APIs afetadas
Opção de compatibilidade DoNotSupportSelectAllShortcutInMultilineTextBox não suportada
A Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
opção de compatibilidade, que foi introduzida no .NET Framework 4.6.1, não é suportada no Windows Forms no .NET Core e .NET 5.0 e posterior.
Alterar a descrição
A partir do .NET Framework 4.6.1, selecionar a tecla de atalho Ctrl + A em um TextBox controle selecionou todo o texto. No .NET Framework 4.6 e em versões anteriores, a seleção da tecla de atalho Ctrl + A não conseguiu selecionar todo o texto se as propriedades Textbox.ShortcutsEnabled e TextBox.Multiline estiverem definidas como .true
A Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
opção de compatibilidade foi introduzida no .NET Framework 4.6.1 para manter o comportamento original. Para obter mais informações, veja TextBox.ProcessCmdKey.
No .NET Core e .NET 5.0 e versões posteriores, o switch não é suportado Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
.
Versão introduzida
3.0
Ação recomendada
Remova o interruptor. O switch não é suportado e nenhuma funcionalidade alternativa está disponível.
Categoria
Windows Forms
APIs afetadas
- Nenhuma
Opção de compatibilidade DontSupportReentrantFilterMessage não suportada
A Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
opção de compatibilidade, que foi introduzida no .NET Framework 4.6.1, não é suportada no Windows Forms no .NET Core e .NET 5.0 e posterior.
Alterar a descrição
A partir do .NET Framework 4.6.1, a opção de Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
compatibilidade aborda possíveis IndexOutOfRangeException exceções quando a Application.FilterMessage mensagem é chamada com uma implementação personalizada IMessageFilter.PreFilterMessage . Para obter mais informações, consulte Mitigação: implementações personalizadas de IMessageFilter.PreFilterMessage.
No .NET Core e .NET 5.0 e posterior, a opção não é suportada Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
.
Versão introduzida
3.0
Ação recomendada
Remova o interruptor. O switch não é suportado e nenhuma funcionalidade alternativa está disponível.
Categoria
Windows Forms
APIs afetadas
Opção de compatibilidade EnableVisualStyleValidation não suportada
A Switch.System.Windows.Forms.EnableVisualStyleValidation
opção de compatibilidade não é suportada no Windows Forms no .NET Core ou .NET 5.0 e posterior.
Alterar a descrição
No .NET Framework, a Switch.System.Windows.Forms.EnableVisualStyleValidation
opção de compatibilidade permitiu que um aplicativo optasse por não validar estilos visuais fornecidos em um formato numérico.
No .NET Core e .NET 5.0 e posterior, a opção não é suportada Switch.System.Windows.Forms.EnableVisualStyleValidation
.
Versão introduzida
3.0
Ação recomendada
Remova o interruptor. O switch não é suportado e nenhuma funcionalidade alternativa está disponível.
Categoria
Windows Forms
APIs afetadas
- Nenhuma
UseLegacyContextMenuStripSourceControlValue opção de compatibilidade não suportada
A Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
opção de compatibilidade, que foi introduzida no .NET Framework 4.7.2, não é suportada no Windows Forms no .NET Core ou .NET 5.0 e posterior.
Alterar a descrição
A partir do .NET Framework 4.7.2, a Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
opção de compatibilidade permite que o desenvolvedor desative o novo comportamento da propriedade, que agora retorna uma referência ao controle do ContextMenuStrip.SourceControl código-fonte. O comportamento anterior do imóvel era devolver null
. Para obter mais informações, consulte <Elemento AppContextSwitchOverrides>.
No .NET Core e .NET 5.0 e posterior, a opção não é suportada Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
.
Versão introduzida
3.0
Ação recomendada
Remova o interruptor. O switch não é suportado e nenhuma funcionalidade alternativa está disponível.
Categoria
Windows Forms
APIs afetadas
A opção de compatibilidade UseLegacyImages não é suportada
A Switch.System.Windows.Forms.UseLegacyImages
opção de compatibilidade, que foi introduzida no .NET Framework 4.8, não é suportada no Windows Forms no .NET Core ou .NET 5.0 e posterior.
Alterar a descrição
A partir do .NET Framework 4.8, a opção de Switch.System.Windows.Forms.UseLegacyImages
compatibilidade resolveu possíveis problemas de dimensionamento de imagem em cenários ClickOnce em ambientes de alto DPI. Quando definido como true
, o switch permite que o usuário restaure o dimensionamento de imagem herdado em monitores de alto DPI cuja escala é definida para mais de 100%. Para obter mais informações, consulte Notas de versão do .NET Framework 4.8 no GitHub.
No .NET Core e .NET 5.0 e posterior, a opção não é suportada Switch.System.Windows.Forms.UseLegacyImages
.
Versão introduzida
3.0
Ação recomendada
Remova o interruptor. O switch não é suportado e nenhuma funcionalidade alternativa está disponível.
Categoria
Windows Forms
APIs afetadas
- Nenhuma
Sobre e os modelos SplashScreen estão quebrados
Os About.vb
arquivos e SplashScreen.vb
gerados pelo Visual Studio contêm referências a tipos no My
namespace que não estão disponíveis .NET Core 3.0 e 3.1.
Versão introduzida
3.0
Alterar a descrição
O .NET Core 3.0 e 3.1 não contêm suporte completo ao Visual Basic My
. Os modelos de formulário Sobre e SplashScreen no Visual Studio para aplicativos Windows Forms Visual Basic referenciam propriedades no My.Application.Info
tipo que não estão disponíveis.
Ação recomendada
O suporte do Visual Basic My
foi melhorado no .NET 5, atualize seu projeto para o .NET 5 ou posterior.
-or-
Corrija os erros do compilador nos tipos About e SplashScreen em seu aplicativo. Use a System.Reflection.Assembly
classe para obter as informações fornecidas pelo My.Application.Info
tipo. Uma porta direta de ambos os formulários está disponível aqui.
Gorjeta
Este é um código de exemplo e não otimizado. A lista de atributos deve ser armazenada em cache para reduzir o tempo de carregamento do formulário.
Acerca de
Imports System.Reflection
Public NotInheritable Class About
Private Sub about_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Set the title of the form.
Dim applicationTitle As String = Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyTitleAttribute)()?.Title
If String.IsNullOrEmpty(applicationTitle) Then
applicationTitle = System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().GetName().Name)
End If
Me.Text = String.Format("About {0}", applicationTitle)
' Initialize all of the text displayed on the About Box.
' TODO: Customize the application's assembly information in the "Application" pane of the project
' properties dialog (under the "Project" menu).
Me.LabelProductName.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyProductAttribute)()?.Product, "")
Me.LabelVersion.Text = String.Format("Version {0}", Assembly.GetExecutingAssembly().GetName().Version)
Me.LabelCopyright.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "")
Me.LabelCompanyName.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCompanyAttribute)()?.Company, "")
Me.TextBoxDescription.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyDescriptionAttribute)()?.Description, "")
End Sub
Private Sub OKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OKButton.Click
Me.Close()
End Sub
End Class
Ecrã Inicial
Imports System.Reflection
Public NotInheritable Class SplashScreen
Private Sub SplashScreen1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'Set up the dialog text at runtime according to the application's assembly information.
'TODO: Customize the application's assembly information in the "Application" pane of the project
' properties dialog (under the "Project" menu).
'Application title
Dim appTitle As String = Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyTitleAttribute)()?.Title
If String.IsNullOrEmpty(appTitle) Then
appTitle = System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().GetName().Name)
End If
ApplicationTitle.Text = appTitle
Dim versionValue = Assembly.GetExecutingAssembly().GetName().Version
'Format the version information using the text set into the Version control at design time as the
' formatting string. This allows for effective localization if desired.
' Build and revision information could be included by using the following code and changing the
' Version control's designtime text to "Version {0}.{1:00}.{2}.{3}" or something similar. See
' String.Format() in Help for more information.
'
' Version.Text = System.String.Format(Version.Text, versionValue.Major, versionValue.Minor, versionValue.Build, versionValue.Revision)
Version.Text = System.String.Format(Version.Text, versionValue.Major, versionValue.Minor)
'Copyright info
Copyright.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "")
End Sub
End Class
Categoria
Visual Basic Windows Forms
APIs afetadas
Nenhum
Consulte também
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários