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:
.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:
- 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
Zavedená verze
3.1
Doporučená akce
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
- 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
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
Doporučená akce
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 pt
hodnotu . Následující obrázek znázorňuje okno, které používá výchozí písmo.
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:
Tato změna byla provedena tak, aby odpovídala pokynům pro uživatelské prostředí windows.
Zavedená verze
3,0
Doporučená akce
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 pt
hodnotu . 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:
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:
Zavedená verze
3,0
Doporučená akce
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:
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
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
Doporučená akce
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
Doporučená akce
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
Doporučená akce
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
Doporučená akce
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
Doporučená akce
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
Doporučená akce
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
Doporučená akce
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
Doporučená akce
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
Doporučená akce
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.
Doporučená akce
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é
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro