Dela via


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:

Brytande förändring Version lanserades
Borttagna kontroller 3.1
Händelsen CellFormatting utlöses inte om tooltip visas 3.1
Control.DefaultFont har ändrats till Segoe UI 9 pt 3.0
Modernisering av FolderBrowserDialog 3.0
SerializableAttribute har tagits bort från vissa Typer av Windows-formulär 3.0
AllowUpdateChildControlIndexForTabControls-kompatibilitetsväxeln stöds inte 3.0
DomainUpDown.UseLegacyScrolling-kompatibilitetsväxeln stöds inte 3.0
DoNotLoadLatestRichEditControl-kompatibilitetsväxeln stöds inte 3.0
DoNotSupportSelectAllShortcutInMultilineTextBox-kompatibilitetsväxeln stöds inte 3.0
DontSupportReentrantFilterMessage-kompatibilitetsväxeln stöds inte 3.0
EnableVisualStyleValidation-kompatibilitetsväxeln stöds inte 3.0
UseLegacyContextMenuStripSourceControlValue-kompatibilitetsväxeln stöds inte 3.0
UseLegacyImages kompatibilitetsväxel stöds inte 3.0
Om- och SplashScreen-mallar är trasiga för Visual Basic 3.0

.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:

Version introducerad

3.1

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


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

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.

Standardkontrollteckensnitt i .NET Framework

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:

Standardkontrollteckensnitt i .NET Core

Den här ändringen gjordes i enlighet med riktlinjer för Windows-användarupplevelse (UX).

Version introducerad

3.0

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:

FolderBrowserDialogControl i .NET Frameworket

I .NET Core 3.0 använder Windows Forms en nyare COM-baserad kontroll som introducerades i Windows Vista:

FolderBrowserDialogControl i .NET Core

Version introducerad

3.0

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:

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

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

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

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

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

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

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

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

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å truetillå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

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.

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


Se även