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 verzí .NET, ve které byly zavedeny. Pokud upgradujete aplikaci model Windows Forms z .NET Framework nebo z předchozí verze .NET Core (3.0 nebo novější), platí pro vás tento článek.

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

Zásadní změna Představená verze
Odebrané ovládací prvky 3.1
Událost CellFormatting se nevyvolá, pokud se zobrazí popis 3.1
Control.DefaultFont se změnil na Segoe UI 9 pt 3.0
Modernizace folderBrowserDialog 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
Přepínač kompatibility DoNotLoadLatestRichEditControl se nepodporuje. 3.0
Přepínač kompatibility DoNotSupportSelectAllShortcutInMultilineTextBox se nepodporuje. 3.0
Přepínač kompatibility DontSupportReentrantFilterMessage se nepodporuje. 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 se pro Visual Basic přerušují 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.

Popis změny

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

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

Představená 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á jsou odebrána
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 se zobrazí popis

Při DataGridView najetí myší myší a při 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á.

Popis změny

Před .NET Core 3.1, která měla ShowCellToolTips vlastnost nastavenou tak, DataGridView aby zobrazovala true popis textu buňky a chyby při najetí myší na buňku. Popisy se nezobrazují, 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, když DataGridView byl stále v režimu úprav, najedl myší na buňku, která nemá nastavenou ToolTipText vlastnost, byla událost vyvolána, CellFormatting aby formátovala text buňky pro zobrazení v buňce.

Pokud chcete splnit standardy přístupnosti, počínaje verzí .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, které ToolTipText nemají sadu vlastností, CellFormatting 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 zobrazuje jako popis.

Představená 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

Žádné


.NET Core 3.0

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

Popis změny

V .NET Framework byla Control.DefaultFont 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. Například:

Default control font in .NET Core

Tato změna byla provedena tak, aby odpovídala pokynům pro uživatelské prostředí (UX) 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 . Například:

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

Kategorie

  • Windows Forms

Ovlivněná rozhraní API

Žádné


Modernizace složkyBrowserDialog

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

Popis změny

V .NET Framework Windows formuláře pro ovládací prvek používají následující dialogové oknoFolderBrowserDialog:

The FolderBrowserDialogControl in the .NET Framework

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

The FolderBrowserDialogControl in the .NET Core

Zavedená verze

3.0

Dialogové okno se automaticky upgraduje.

Pokud chcete zachovat původní dialog, 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 odebrané z některých typů model Windows Forms

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

Popis změny

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

V minulosti měl tento serializační mechanismus vážné obavy týkající se údržby a zabezpečení. Údržba SerializableAttribute typů znamená, že tyto typy musí být testovány pro změny serializace verzí na verzi a potenciálně změny serializace rozhraní-to-framework. 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 najdete 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

  • Žádné

Přepínač kompatibility AllowUpdateChildControlIndexForTabControls se nepodporuje.

Přepínač Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls kompatibility je podporován v model Windows Forms na .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.

Popis změny

V .NET Framework 4.6 a novějších verzích vyberete kartu, která změní pořadí kolekce ovládacích prvků. Přepínač Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls 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ším Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls není přepínač podporován.

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

  • Žádné

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

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

Popis změny

Počínaje verzí .NET Framework 4.7.1 Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling umožňuje přechod na kompatibilitu vývojářům vyjádřit výslovný 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 ovládacího prvku před DomainUpDown.UpButton() akcí. Další informace najdete v tématu <AppContextSwitchOverrides> – element.

V .NET Core a .NET 5.0 a novějším Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling není přepínač podporován.

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 DoNotLoadLatestRichEditControl se nepodporuje.

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

Popis změny

V .NET Framework 4.6.2 a předchozích verzích RichTextBox ovládací prvek Win32 RichEdit vytvoří instanci ovládacího prvku Win32 RichEdit verze 3.0 a pro aplikace, které cílí na .NET Framework 4.7.1, RichTextBox ovládací prvek vytvoří instanci RichEdit v4.1 (v msftedit.dll). Byl Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl zaveden přepínač kompatibility umožňující aplikacím, které cílí na .NET Framework 4.7.1 a novější verze, aby se odhlásily z nového ovládacího prvku RichEdit verze 4.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


Přepínač kompatibility DoNotSupportSelectAllShortcutInMultilineTextBox se nepodporuje.

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

Popis změny

Počínaje .NET Framework 4.6.1 vyberte klávesovou zkratku CtrlA + v ovládacímTextBox prvku vybraný veškerý text. V .NET Framework 4.6 a předchozích verzích se po výběru klávesové zkratky CtrlA + nepodařilo 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 .NET Framework 4.6.1 pro zachování původního chování. Další informace naleznete zde 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

  • Žádné

Přepínač kompatibility DontSupportReentrantFilterMessage se nepodporuje.

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

Popis změny

Počínaje .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 najdete v tématu Zmírnění rizik: Vlastní implementace IMessageFilter.PreFilterMessage.

V .NET Core a .NET 5.0 a novějším Switch.System.Windows.Forms.DontSupportReentrantFilterMessage není přepínač podporován.

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ší.

Popis změny

V .NET Framework Switch.System.Windows.Forms.EnableVisualStyleValidation přepínač kompatibility umožnil aplikaci vyjádřit výslovný 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ším Switch.System.Windows.Forms.EnableVisualStyleValidation není přepínač podporován.

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

  • Žádné

Přepínač kompatibility UseLegacyContextMenuStripSourceControlValue se nepodporuje.

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

Popis změny

Počínaje verzí .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á teď vrací odkaz na správu zdrojového kódu. Předchozí chování vlastnosti bylo vráceno null. Další informace najdete v tématu <AppContextSwitchOverrides> – element.

V .NET Core a .NET 5.0 a novějším Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue není přepínač podporován.

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 .NET Framework 4.8, není podporován v model Windows Forms v .NET Core nebo .NET 5.0 a novější.

Popis změny

Počínaje .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 ClickOnce scénářích v prostředích s vysokým rozlišením DPI. Když je přepínač nastavený na true, umožňuje uživateli obnovit starší měřítko obrázku na displejích s vysokým rozlišením DPI, jejichž měřítko je nastaveno na větší než 100 %. Další informace najdete v .NET Framework 4.8 poznámky k verzi GitHub.

V .NET Core a .NET 5.0 a novějším Switch.System.Windows.Forms.UseLegacyImages není přepínač podporován.

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

  • Žádné

Šablony Úvodní obrazovky a Úvodní obrazovka jsou přerušené.

Soubory About.vb generované SplashScreen.vb 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

Popis změny

.NET Core 3.0 a 3.1 neobsahují úplnou podporu Visual BasicMy. Šablony formulářů About a SplashScreen v Visual Studio pro Visual Basic model Windows Forms aplikace odkazují na vlastnosti typuMy.Application.Info, který není k dispozici.

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

-nebo-

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

Tip

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

O aplikaci

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

Žádné


Viz také