Zásadní změny v model Windows Forms pro .NET Core 3.0 a 3.1

model Windows Forms podpora byla přidána do .NET Core ve verzi 3.0. Tento článek uvádí zásadní změny pro model Windows Forms ve verzi .NET, ve které byly zavedeny. Pokud upgradujete aplikaci model Windows Forms z rozhraní .NET Framework nebo z předchozí verze .NET Core (3.0 nebo novější), tento článek se vás týká.

Na této stránce jsou popsané následující zásadní změny:

Změna způsobující chybu Zavedená verze
Odebrané ovládací prvky 3.1
Událost CellFormatting se nevyvolá, pokud je zobrazen popis 3.1
Control.DefaultFont se změnil na Segoe UI 9 pt 3,0
Modernizace složkyBrowserDialog 3,0
SerializableAttribute odebrán z některých typů model Windows Forms 3,0
Přepínač kompatibility AllowUpdateChildControlIndexForTabControls se nepodporuje. 3,0
Přepínač kompatibility DomainUpDown.UseLegacyScrolling se nepodporuje. 3,0
Nepodporovaný přepínač kompatibility DoNotLoadLatestRichEditControl 3,0
Nepodporovaný přepínač kompatibility DoNotSupportSelectAllShortcutInMultilineTextBox 3,0
Přepínač kompatibility DontSupportReentrantFilterMessage není podporován. 3,0
Přepínač kompatibility EnableVisualStyleValidation se nepodporuje. 3,0
Přepínač kompatibility UseLegacyContextMenuStripSourceControlValue se nepodporuje. 3,0
Přepínač kompatibility UseLegacyImages se nepodporuje. 3,0
Šablony about a SplashScreen jsou pro Visual Basic poškozené 3,0

.NET Core 3.1

Odebrané ovládací prvky

Počínaje verzí .NET Core 3.1 už některé ovládací prvky model Windows Forms nejsou k dispozici.

Změna popisu

Od verze .NET Core 3.1 už nejsou k dispozici různé ovládací prvky model Windows Forms. V rozhraní .NET Framework 2.0 byly zavedeny náhradní ovládací prvky, které mají lepší návrh a podporu. Zastaralé ovládací prvky byly dříve odebrány z nástrojů návrháře, ale byly stále k dispozici k použití.

Následující typy už nejsou k dispozici:

Zavedená verze

3.1

Každý odebraný ovládací prvek má doporučený náhradní ovládací prvek. Informace najdete v následující tabulce:

Odebrání ovládacího prvku (API) Doporučená náhrada Přidružená rozhraní API, která se odeberou
ContextMenu ContextMenuStrip
DataGrid Datagridview DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType
Mainmenu MenuStrip
Nabídka ToolStripDropDown, ToolStripDropDownMenu MenuItemCollection
MenuItem Toolstripmenuitem
ToolBar ToolStrip ToolBarAppearance
Toolbarbutton Toolstripbutton ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign

Kategorie

Windows Forms

Ovlivněná rozhraní API


Událost CellFormatting se nevyvolá, pokud je zobrazen popis

Při DataGridView najetí myší myší a po výběru pomocí klávesnice se teď zobrazí popisy textu a chyby buňky. Pokud se zobrazí popis, DataGridView.CellFormatting událost se nevyvolá.

Změna popisu

Před .NET Core 3.1, DataGridView který měl nastavenou ShowCellToolTips vlastnost true zobrazovat popis textu buňky a chyby při najetí myší na buňku. Popisy nebyly zobrazeny, když byla buňka vybrána pomocí klávesnice (například pomocí klávesy Tab, klávesových zkratek nebo navigace se šipkami). Pokud uživatel upravil buňku a potom, i když DataGridView byl stále v režimu úprav, najedl myší na buňku, která nemá nastavenou ToolTipText vlastnost, CellFormatting byla vyvolána událost, která naformátuje text buňky pro zobrazení v buňce.

Pro splnění standardů přístupnosti počínaje rozhraním .NET Core 3.1, která má vlastnost nastavenou ShowCellToolTips tak, DataGridView aby true zobrazovala popisy textu buňky a chyby nejen v případě, že je buňka najetá myší, ale také když je vybraná přes klávesnici. V důsledku této změny není událost vyvolána, pokud buňky, CellFormatting které nemají nastavenou ToolTipText vlastnost, jsou najet myší, když DataGridView je v režimu úprav. Událost není vyvolána, protože obsah najeté buňky se místo zobrazení v buňce zobrazí jako popis.

Zavedená verze

3.1

Refaktoring libovolného CellFormatting kódu, který závisí na události, když DataGridView je v režimu úprav.

Kategorie

Windows Forms

Ovlivněná rozhraní API

Nic


.NET Core 3.0

Výchozí písmo ovládacího prvku se změnilo na Segoe UI 9 pt

Změna popisu

V rozhraní .NET Framework Control.DefaultFont byla vlastnost nastavena na Microsoft Sans Serif 8 pthodnotu . Následující obrázek znázorňuje okno, které používá výchozí písmo.

Default control font in .NET Framework

Počínaje verzí .NET Core 3.0 je výchozí písmo nastavené na Segoe UI 9 pt (stejné písmo jako SystemFonts.MessageBoxFont). V důsledku této změny mají formuláře a ovládací prvky velikost přibližně 27 % větší, aby se zohlednila větší velikost nového výchozího písma. Příklad:

Default control font in .NET Core

Tato změna byla provedena tak, aby odpovídala pokynům pro uživatelské prostředí windows.

Zavedená verze

3,0

Vzhledem ke změně velikosti formulářů a ovládacích prvků se ujistěte, že se aplikace správně vykresluje.

Pokud chcete zachovat původní písmo, nastavte výchozí písmo formuláře na Microsoft Sans Serif 8 pthodnotu . Příklad:

public MyForm()
{
    InitializeComponent();
    Font = new Font(new FontFamily("Microsoft Sans Serif"), 8f);
}

Kategorie

  • Windows Forms

Ovlivněná rozhraní API

Nezaokrouhlovat.


Modernizace složkyBrowserDialog

Ovládací FolderBrowserDialog prvek se v model Windows Forms aplikacích pro .NET Core změnil.

Změna popisu

V rozhraní .NET Framework používá windows forms pro FolderBrowserDialog ovládací prvek následující dialog:

The FolderBrowserDialogControl in the .NET Framework

V rozhraní .NET Core 3.0 používá model Windows Forms novější ovládací prvek založený na modelu COM, který byl zaveden v systému Windows Vista:

The FolderBrowserDialogControl in the .NET Core

Zavedená verze

3,0

Dialogové okno se automaticky upgraduje.

Pokud chcete zachovat původní dialogové okno, nastavte FolderBrowserDialog.AutoUpgradeEnabled vlastnost před false zobrazením dialogového okna, jak je znázorněno následujícím fragmentem kódu:

var dialog = new FolderBrowserDialog();
dialog.AutoUpgradeEnabled = false;
dialog.ShowDialog();

Kategorie

Windows Forms

Ovlivněná rozhraní API


SerializableAttribute odebrán z některých typů model Windows Forms

Byl SerializableAttribute odebrán z některých model Windows Forms tříd, které nemají žádné známé binární serializace scénáře.

Změna popisu

Následující typy jsou zdobené SerializableAttribute v rozhraní .NET Framework, ale atribut byl odebrán v .NET Core:

Tento mechanismus serializace má v minulosti vážné obavy ohledně údržby a zabezpečení. Údržba SerializableAttribute typů znamená, že tyto typy musí být testovány na změny serializace verze na verzi a potenciálně změny serializace architektury na architekturu. To znesnadňuje vývoj těchto typů a může být nákladný na údržbu. Tyto typy nemají žádné známé scénáře binární serializace, které minimalizují dopad odebrání atributu.

Další informace naleznete v tématu Binární serializace.

Zavedená verze

3,0

Aktualizujte veškerý kód, který může záviset na těchto typech, které jsou označené jako serializovatelné.

Kategorie

Windows Forms

Ovlivněná rozhraní API

  • Nic

Přepínač kompatibility AllowUpdateChildControlIndexForTabControls se nepodporuje.

Přepínač Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls kompatibility je podporován v model Windows Forms v rozhraní .NET Framework 4.6 a novějších verzích, ale nepodporuje se v .NET Core nebo .NET 5.0 a novějších verzích.

Změna popisu

V rozhraní .NET Framework 4.6 a novějších verzích se při výběru karty změní pořadí kolekce ovládacích prvků. Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls Přepínač kompatibility umožňuje aplikaci přeskočit toto změny pořadí, pokud je toto chování nežádoucí.

V .NET Core a .NET 5.0 a novějších Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls se přepínač nepodporuje.

Zavedená verze

3,0

Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.

Kategorie

Windows Forms

Ovlivněná rozhraní API

  • Nic

Přepínač kompatibility DomainUpDown.UseLegacyScrolling se nepodporuje.

Přepínač Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling kompatibility, který byl zaveden v rozhraní .NET Framework 4.7.1, není podporován v model Windows Forms v .NET Core nebo .NET 5.0 a novější.

Změna popisu

Počínaje rozhraním .NET Framework 4.7.1 Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling umožňuje přechod na kompatibilitu vývojářům vyjádřit nesouhlas s nezávislými DomainUpDown.DownButton() akcemi a DomainUpDown.UpButton() akcemi. Přepínač obnovil starší verzi chování, ve kterém DomainUpDown.UpButton() se ignoruje, pokud je kontextový text k dispozici, a vývojář musí použít DomainUpDown.DownButton() akci na ovládacím prvku před DomainUpDown.UpButton() akcí. Další informace naleznete v tématu <AppContextSwitchOverrides> element.

V .NET Core a .NET 5.0 a novějších Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling se přepínač nepodporuje.

Zavedená verze

3,0

Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.

Kategorie

Windows Forms

Ovlivněná rozhraní API


Nepodporovaný přepínač kompatibility DoNotLoadLatestRichEditControl

Přepínač Switch.System.Windows.Forms.UseLegacyImages kompatibility, který byl zaveden v rozhraní .NET Framework 4.7.1, není podporován v model Windows Forms v .NET Core nebo .NET 5.0 a novější.

Změna popisu

V rozhraní .NET Framework 4.6.2 a předchozích verzích RichTextBox ovládací prvek Win32 RichEdit v3.0 a pro aplikace, které cílí na rozhraní .NET Framework 4.7.1, RichTextBox vytvoří instance ovládacího prvku RichEdit v4.1 (v msftedit.dll). Přepínač kompatibility byl zaveden tak Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl , aby umožňoval aplikacím, které cílí na rozhraní .NET Framework 4.7.1 a novější verze, aby se odhlásily z nového ovládacího prvku RichEdit v4.1 a místo toho používaly starý ovládací prvek RichEdit v3.

V .NET Core a .NET 5.0 a novějších verzích Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl se přepínač nepodporuje. Podporují se jenom nové verze RichTextBox ovládacího prvku.

Zavedená verze

3,0

Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.

Kategorie

Windows Forms

Ovlivněná rozhraní API


Nepodporovaný přepínač kompatibility DoNotSupportSelectAllShortcutInMultilineTextBox

Přepínač Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox kompatibility, který byl zaveden v rozhraní .NET Framework 4.6.1, není podporován v model Windows Forms v .NET Core a .NET 5.0 a novější.

Změna popisu

Počínaje rozhraním .NET Framework 4.6.1 vyberte klávesovou zkratku Ctrl + A v ovládacím TextBox prvku vybraný veškerý text. V rozhraní .NET Framework 4.6 a předchozích verzích se po výběru klávesové zkratky Ctrl + A nepodařilo se vybrat veškerý text, pokud byla vlastnost Textbox.ShortcutsEnabled a TextBox.Multiline vlastnosti nastaveny na .true Přepínač Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox kompatibility byl zaveden v rozhraní .NET Framework 4.6.1, aby se zachovalo původní chování. Další informace najdete tady: TextBox.ProcessCmdKey.

V .NET Core a .NET 5.0 a novějších verzích Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox se přepínač nepodporuje.

Zavedená verze

3,0

Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.

Kategorie

Windows Forms

Ovlivněná rozhraní API

  • Nic

Přepínač kompatibility DontSupportReentrantFilterMessage není podporován.

Přepínač Switch.System.Windows.Forms.DontSupportReentrantFilterMessage kompatibility, který byl zaveden v rozhraní .NET Framework 4.6.1, není podporován v model Windows Forms v .NET Core a .NET 5.0 a novější.

Změna popisu

Počínaje rozhraním .NET Framework 4.6.1 Switch.System.Windows.Forms.DontSupportReentrantFilterMessage řeší přepínač kompatibility možné IndexOutOfRangeException výjimky při Application.FilterMessage zavolání zprávy s vlastní IMessageFilter.PreFilterMessage implementací. Další informace naleznete v tématu Zmírnění: Vlastní IMessageFilter.PreFilterMessage Implementace.

V .NET Core a .NET 5.0 a novějších Switch.System.Windows.Forms.DontSupportReentrantFilterMessage se přepínač nepodporuje.

Zavedená verze

3,0

Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.

Kategorie

Windows Forms

Ovlivněná rozhraní API


Přepínač kompatibility EnableVisualStyleValidation se nepodporuje.

Přepínač Switch.System.Windows.Forms.EnableVisualStyleValidation kompatibility není podporován v model Windows Forms v .NET Core nebo .NET 5.0 a novějších.

Změna popisu

V rozhraní .NET Framework Switch.System.Windows.Forms.EnableVisualStyleValidation přepínač kompatibility povolil aplikaci vyjádřit nesouhlas s ověřováním stylů vizuálů zadaných v číselném formátu.

V .NET Core a .NET 5.0 a novějších Switch.System.Windows.Forms.EnableVisualStyleValidation se přepínač nepodporuje.

Zavedená verze

3,0

Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.

Kategorie

Windows Forms

Ovlivněná rozhraní API

  • Nic

Přepínač kompatibility UseLegacyContextMenuStripSourceControlValue se nepodporuje.

Přepínač Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue kompatibility, který byl zaveden v rozhraní .NET Framework 4.7.2, není podporován v model Windows Forms v .NET Core nebo .NET 5.0 a novější.

Změna popisu

Počínaje rozhraním .NET Framework 4.7.2 Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue umožňuje vývojáři vyjádřit nesouhlas s novým chováním ContextMenuStrip.SourceControl vlastnosti, která nyní vrací odkaz na správu zdrojového kódu. Předchozí chování vlastnosti bylo vráceno null. Další informace naleznete v tématu <AppContextSwitchOverrides> element.

V .NET Core a .NET 5.0 a novějších Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue se přepínač nepodporuje.

Zavedená verze

3,0

Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.

Kategorie

Windows Forms

Ovlivněná rozhraní API


Přepínač kompatibility UseLegacyImages se nepodporuje.

Přepínač Switch.System.Windows.Forms.UseLegacyImages kompatibility, který byl zaveden v rozhraní .NET Framework 4.8, není podporován v model Windows Forms v .NET Core nebo .NET 5.0 a novější.

Změna popisu

Počínaje rozhraním .NET Framework 4.8 Switch.System.Windows.Forms.UseLegacyImages vyřešil přepínač kompatibility možné problémy se škálováním obrázků ve scénářích ClickOnce v prostředích s vysokým rozlišením DPI. Pokud je tato možnost nastavená true, umožňuje uživateli obnovit starší měřítko image na displejích s vysokým rozlišením DPI, jejichž měřítko je nastaveno na větší než 100 %. Další informace najdete v poznámkách k verzi rozhraní .NET Framework 4.8 na GitHubu.

V .NET Core a .NET 5.0 a novějších Switch.System.Windows.Forms.UseLegacyImages se přepínač nepodporuje.

Zavedená verze

3,0

Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.

Kategorie

Windows Forms

Ovlivněná rozhraní API

  • Nic

Šablony About a SplashScreen jsou poškozené

SplashScreen.vb Soubory About.vb generované sadou Visual Studio obsahují odkazy na typy v My oboru názvů, které nejsou k dispozici .NET Core 3.0 a 3.1.

Zavedená verze

3,0

Změna popisu

.NET Core 3.0 a 3.1 neobsahují úplnou podporu jazyka Visual Basic My . Šablony formulářů About a SplashScreen v sadě Visual Studio pro Visual Basic model Windows Forms referenční vlastnosti aplikací v My.Application.Info typu, který není k dispozici.

Podpora jazyka Visual Basic My byla vylepšena v .NET 5, upgradujte projekt na .NET 5 nebo novější.

nebo

Opravte chyby kompilátoru v typech About a SplashScreen v aplikaci. System.Reflection.Assembly Pomocí třídy získáte informace poskytované typemMy.Application.Info. Tady je k dispozici přímý port obou formulářů.

Tip

Toto je ukázkový kód a neoptimalizovaný. Seznam atributů by se měl ukládat do mezipaměti, aby se zkrátila doba načítání formuláře.

O uživateli

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

Úvodní obrazovka

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

Kategorie

Visual Basic model Windows Forms

Ovlivněná rozhraní API

Nic


Viz také