Förändringar som inte är bakåtkompatibla i Windows Forms för .NET Core 3.0 och 3.1
Stöd för Windows Forms har lagts till i .NET Core i version 3.0. I den här artikeln visas icke-bakåtkompatibla ändringar för Windows Forms av .NET-versionen där de introducerades. Om du uppgraderar en Windows Forms-app från .NET Framework eller från en tidigare version av .NET Core (3.0 eller senare) gäller den här artikeln för dig.
De följande brytande ändringarna dokumenteras på den här sidan:
.NET Core 3.1
Borttagna kontroller
Från och med .NET Core 3.1 är vissa Windows Forms-kontroller inte längre tillgängliga.
Ändra beskrivning
Från och med .NET Core 3.1 är olika Windows Forms-kontroller inte längre tillgängliga. Ersättningskontroller som har bättre design och stöd introducerades i .NET Framework 2.0. De inaktuella kontrollerna har tidigare tagits bort från designerverktygslådor men var fortfarande tillgängliga för användning.
Följande typer är inte längre tillgängliga:
- ContextMenu
- DataGrid
- DataGrid.HitTestType
- DataGrid.HitTestInfo
- DataGridBoolColumn
- DataGridCell
- DataGridColumnStyle
- DataGridColumnStyle.DataGridColumnHeaderAccessibleObject
- DataGridColumnStyle.CompModSwitches
- DataGridLineStyle
- DataGridParentRowsLabelStyle
- DataGridPreferredColumnWidthTypeConverter
- DataGridTableStyle
- DataGridTextBox
- DataGridTextBoxColumn
- GridColumnStylesCollection
- GridTablesFactory
- GridTableStylesCollection
- IDataGridEditingService
- IMenuEditorService
- MainMenu
- Menu
- Menu.MenuItemCollection
- MenuItem
- ToolBar
- ToolBarAppearance
- ToolBarButton
- ToolBar.ToolBarButtonCollection
- ToolBarButtonClickEventArgs
- ToolBarButtonStyle
- ToolBarTextAlign
Version introducerad
3.1
Rekommenderad åtgärd
Varje borttagen kontroll har en rekommenderad ersättningskontroll. Se följande tabell:
Borttagen kontroll (API) | Rekommenderad ersättning | Associerade API:er som tas bort |
---|---|---|
ContextMenu | ContextMenuStrip | |
DataGrid | DataGridView | DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType |
Huvudmeny | MenuStrip | |
Meny | ToolStripDropDown, ToolStripDropDownMenu | Menyobjektsamling |
Menyobjekt | ToolStripMenuItem | |
Verktygsfält | ToolStrip | Verktygsradens Utseende |
Verktygsfältsknapp | VerktygsradsKnapp | ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign |
Kategori
Windows-formulär
Berörda API:er
- 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
CellFormateringshändelsen aktiveras inte om verktygstipset visas
En DataGridView visar nu en cells text och felmeddelanden när muspekaren hålls över och när den väljs via tangentbordet. Om ett verktygstips visas utlöses inte DataGridView.CellFormatting-händelsen.
Ändra beskrivning
Före .NET Core 3.1 visade en DataGridView som hade egenskapen ShowCellToolTips inställd på true
ett verktygstips för en cells text och fel när du förde muspekaren över cellen. Verktygsbeskrivningar visades inte när en cell valdes via tangentbordet (till exempel med hjälp av tabbtangenten, genvägstangenterna eller piltangenterna). Om användaren redigerade en cell och sedan, medan DataGridView fortfarande var i redigeringsläge, hovrade över en cell som inte hade egenskapen ToolTipText inställd, uppstod en CellFormatting händelse för att formatera cellens text för visning i cellen.
För att uppfylla tillgänglighetsstandarderna, från och med .NET Core 3.1, visar en DataGridView som har egenskapen ShowCellToolTips inställd på true
knappbeskrivningar för en cells text och fel, inte bara när cellen hovrar, utan även när den väljs via tangentbordet. Till följd av den här ändringen CellFormatting händelsen inte när celler som inte har ToolTipText egenskapsuppsättning hovras medan DataGridView är i redigeringsläge. Händelsen aktiveras inte eftersom innehållet i cellen under markören visas som ett verktygstips i stället för att visas i cellen.
Version introducerad
3.1
Rekommenderad åtgärd
Omstrukturera all kod som är beroende av den CellFormatting händelsen medan DataGridView är i redigeringsläge.
Kategori
Windows-formulär
Berörda API:er
Ingen
.NET Core 3.0
Standardkontrollteckensnittet har ändrats till Segoe UI 9 pt
Ändra beskrivning
I .NET Framework har egenskapen Control.DefaultFont angetts till Microsoft Sans Serif 8.25 pt
. Följande bild visar ett fönster som använder standardteckensnittet.
Från och med .NET Core 3.0 är standardteckensnittet inställt på Segoe UI 9 pt
(samma teckensnitt som SystemFonts.MessageBoxFont). Som ett resultat av den här ändringen är formulär och kontroller ungefär 27% större för att ta hänsyn till den större storleken på det nya standardteckensnittet. Till exempel:
Den här ändringen gjordes i enlighet med riktlinjer för Windows-användarupplevelse (UX).
Version introducerad
3.0
Rekommenderad åtgärd
På grund av ändringen i storleken på formulär och kontroller kontrollerar du att programmet renderas korrekt.
Om du vill behålla det ursprungliga teckensnittet för ett enskilt formulär anger du standardteckensnittet till Microsoft Sans Serif 8.25 pt
. Till exempel:
public MyForm()
{
InitializeComponent();
Font = new Font(new FontFamily("Microsoft Sans Serif"), 8.25f);
}
Du kan också ändra standardteckensnittet för ett helt program på något av följande sätt:
Genom att ange egenskapen
ApplicationDefaultFont
MSBuild till "Microsoft Sans Serif, 8.25pt". Det här är den bästa tekniken eftersom det gör att Visual Studio kan använda de nya inställningarna i designern.<PropertyGroup> <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont> </PropertyGroup>
Genom att anropa 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()); } }
Kategori
- Windows-formulär
Berörda API:er
Ingen.
Modernisering av FolderBrowserDialog
Kontrollen FolderBrowserDialog har ändrats i Windows Forms-program för .NET Core.
Ändra beskrivning
I .NET Framework använder Windows-formulär följande dialogruta för FolderBrowserDialog-kontrollen:
I .NET Core 3.0 använder Windows Forms en nyare COM-baserad kontroll som introducerades i Windows Vista:
Version introducerad
3.0
Rekommenderad åtgärd
Dialogrutan uppgraderas automatiskt.
Om du vill behålla den ursprungliga dialogrutan anger du egenskapen FolderBrowserDialog.AutoUpgradeEnabled till false
innan du visar dialogrutan, vilket illustreras av följande kodfragment:
var dialog = new FolderBrowserDialog();
dialog.AutoUpgradeEnabled = false;
dialog.ShowDialog();
Kategori
Windows-formulär
Berörda API:er
SerializableAttribute har tagits bort från vissa Typer av Windows-formulär
SerializableAttribute har tagits bort från vissa Windows Forms-klasser som inte har några kända scenarier med binär serialisering.
Ändra beskrivning
Följande typer är dekorerade med SerializableAttribute i .NET Framework, men attributet har tagits bort i .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
Tidigare har den här serialiseringsmekanismen haft allvarliga underhålls- och säkerhetsproblem. Att underhålla SerializableAttribute
på typer innebär att dessa typer måste testas för serialiseringsändringar från version till version och potentiellt serialiseringsändringar från ramverk till ramverk. Detta gör det svårare att utveckla dessa typer och kan vara kostsamt att underhålla. Dessa typer har inga kända scenarier för binär serialisering, vilket minimerar effekten av att ta bort attributet.
För mer information, se binär serialisering.
Version introducerad
3.0
Rekommenderad åtgärd
Uppdatera all kod som kan vara beroende av att dessa typer markeras som serialiserbara.
Kategori
Windows-formulär
Berörda API:er
- Ingen
AllowUpdateChildControlIndexForTabControls-kompatibilitetsväxeln stöds inte
Kompatibilitetsväxeln Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
stöds i Windows Forms i .NET Framework 4.6 och senare versioner, men stöds inte på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
Om du väljer en flik i .NET Framework 4.6 och senare versioner, ordnas dess kontrollsamling om. Med Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
kompatibilitetsväxel kan ett program hoppa över den här omordningen när det här beteendet är oönskat.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
.
Version introducerad
3.0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
- Ingen
DomainUpDown.UseLegacyScrolling-kompatibilitetsväxeln stöds inte
Den Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
kompatibilitetsväxeln, som introducerades i .NET Framework 4.7.1, stöds inte i Windows Forms på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
Från och med .NET Framework 4.7.1 gjorde Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
-kompatibilitetsswitchen det möjligt för utvecklare att välja bort oberoende DomainUpDown.DownButton()- och DomainUpDown.UpButton()-funktioner. Växeln återställde det äldre beteendet, där DomainUpDown.UpButton() ignoreras om kontexttext finns, och utvecklaren måste använda DomainUpDown.DownButton() åtgärd på kontrollen innan åtgärden DomainUpDown.UpButton(). Mer information finns i <AppContextSwitchOverrides> element.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
.
Version införd
3.0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
DoNotLoadLatestRichEditControl-kompatibilitetsväxeln stöds inte
Den Switch.System.Windows.Forms.UseLegacyImages
kompatibilitetsväxeln, som introducerades i .NET Framework 4.7.1, stöds inte i Windows Forms på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
I .NET Framework 4.6.2 och tidigare versioner instansierar RichTextBox kontrollen Win32 RichEdit-kontrollen v3.0 och för program som riktar in sig på .NET Framework 4.7.1 instansierar RichTextBox kontrollen RichEdit v4.1 (i msftedit.dll). Den Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl
kompatibilitetsväxeln introducerades för att tillåta program som riktar sig mot .NET Framework 4.7.1 och senare versioner att välja bort den nya RichEdit v4.1-kontrollen och använda den gamla RichEdit v3-kontrollen i stället.
I .NET Core- och .NET 5.0- och senare versioner stöds inte växeln Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl
. Endast nya versioner av RichTextBox-kontrollen stöds.
Version införd
3.0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
DoNotSupportSelectAllShortcutInMultilineTextBox-kompatibilitetsväxeln stöds inte
Den Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
kompatibilitetsväxeln, som introducerades i .NET Framework 4.6.1, stöds inte i Windows Forms på .NET Core och .NET 5.0 och senare.
Ändra beskrivning
Från och med .NET Framework 4.6.1 väljer du Ctrl + En genvägsnyckel i en TextBox kontroll markerade all text. I .NET Framework 4.6 och tidigare versioner kunde du inte välja Ctrl + En genvägsnyckel kunde inte markera all text om Textbox.ShortcutsEnabled och TextBox.Multiline egenskaper båda var inställda på true
. Kompatibilitetsväxeln Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
introducerades i .NET Framework 4.6.1 för att behålla det ursprungliga beteendet. Mer information finns i TextBox.ProcessCmdKey.
I .NET Core- och .NET 5.0- och senare versioner stöds inte växeln Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
.
Version introducerad
3.0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
- Ingen
DontSupportReentrantFilterMessage-kompatibilitetsväxeln stöds inte
Den Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
kompatibilitetsväxeln, som introducerades i .NET Framework 4.6.1, stöds inte i Windows Forms på .NET Core och .NET 5.0 och senare.
Ändra beskrivning
Från och med .NET Framework 4.6.1 löser Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
kompatibilitetsväxling möjliga IndexOutOfRangeException undantag när Application.FilterMessage-meddelandet anropas med en anpassad IMessageFilter.PreFilterMessage implementering. Mer information finns i Mitigation: Custom IMessageFilter.PreFilterMessage Implementations.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
.
Version offentliggjord
3.0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
EnableVisualStyleValidation-kompatibilitetsväxeln stöds inte
Kompatibilitetsväxeln Switch.System.Windows.Forms.EnableVisualStyleValidation
stöds inte i Windows Forms på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
I .NET Framework tillät Switch.System.Windows.Forms.EnableVisualStyleValidation
kompatibilitetsinställningen ett program att välja bort validering av visuella format som tillhandahålls i numerisk form.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.EnableVisualStyleValidation
.
Version introducerad
3.0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
- Ingen
Kompatibilitetsväxeln UseLegacyContextMenuStripSourceControlValue stöds inte
Den Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
kompatibilitetsväxeln, som introducerades i .NET Framework 4.7.2, stöds inte i Windows Forms på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
Från och med .NET Framework 4.7.2 gör Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
kompatibilitetsväxeln att utvecklaren kan välja bort det nya beteendet för egenskapen ContextMenuStrip.SourceControl, som nu returnerar en referens till källkontrollen. Det tidigare beteendet för egenskapen var att returnera null
. Mer information finns i <AppContextSwitchOverrides> element.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
.
Version infördes
3.0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
UseLegacyImages kompatibilitetsväxel stöds inte
Kompatibilitetsväxeln Switch.System.Windows.Forms.UseLegacyImages
, som introducerades i .NET Framework 4.8, stöds inte i Windows Forms på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
Från och med .NET Framework 4.8 åtgärdade Switch.System.Windows.Forms.UseLegacyImages
kompatibilitetsväxeln möjliga problem med bildskalning i ClickOnce-scenarier i miljöer med hög DPI. När den är inställd på true
tillåter växeln att användaren återställer äldre bildskalning på höga DPI-skärmar vars skala är inställd på större än 100%. Mer information finns i .NET Framework 4.8 versionsanteckningar på GitHub.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.UseLegacyImages
.
Version introducerad
3.0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
- Ingen
Om-sidan och SplashScreen-sidan har slutat fungera
De About.vb
- och SplashScreen.vb
filer som genereras av Visual Studio innehåller referenser till typer i My
namnrymd som inte är tillgängliga .NET Core 3.0 och 3.1.
Version lanserad
3.0
Ändra beskrivning
.NET Core 3.0 och 3.1 innehåller inte fullständigt stöd för Visual Basic My
. Referensegenskaperna för Om och SplashScreen formulärmallar i Visual Studio för Visual Basic Windows Forms-appar refererar till egenskaper i My.Application.Info
-typen som inte är tillgängliga.
Rekommenderad åtgärd
Stödet för Visual Basic My
har förbättrats i .NET 5. Uppgradera ditt projekt till .NET 5 eller senare.
-eller-
Åtgärda kompilatorfelen i About och SplashScreen-typerna i din app. Använd klassen System.Reflection.Assembly
för att hämta den information som tillhandahålls av My.Application.Info
typ. En rak port för båda formulären finns här.
Tips
Det här är exempelkod och ej optimerad. Listan över attribut ska cachelagras för att minska tiden för formulärinläsning.
Om
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
SplashScreen
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
Kategori
Visual Basic Windows Forms
Berörda API:er
Ingen