Bagikan melalui


Melanggar perubahan dalam Formulir Windows untuk .NET Core 3.0 dan 3.1

Formulir Windows dukungan ditambahkan ke .NET Core di versi 3.0. Artikel ini mencantumkan perubahan yang melanggar untuk Formulir Windows oleh versi .NET tempat perubahan tersebut diperkenalkan. Jika Anda meningkatkan aplikasi Formulir Windows dari .NET Framework atau dari versi .NET Core (3.0 atau yang lebih baru) sebelumnya, artikel ini berlaku untuk Anda.

Perubahan mencolok berikut ini didokumenkan di halaman ini:

Breaking change Versi yang diperkenalkan
Kontrol yang dihapus 3.1
Peristiwa CellFormatting tidak dimunculkan jika tipsalat ditampilkan 3.1
Control.DefaultFont berubah menjadi Segoe UI 9 pt 3.0
Modernisasi FolderBrowserDialog 3.0
SerializableAttribute dihapus dari beberapa jenis Formulir Windows 3.0
Sakelar kompatibilitas AllowUpdateChildControlIndexForTabControls tidak didukung 3.0
Sakelar kompatibilitas DomainUpDown.UseLegacyScrolling tidak didukung 3.0
Sakelar kompatibilitas DoNotLoadLatestRichEditControl tidak didukung 3.0
Sakelar kompatibilitas DoNotSupportSelectAllShortcutInMultilineTextBox tidak didukung 3.0
Sakelar kompatibilitas DontSupportReentrantFilterMessage tidak didukung 3.0
Sakelar kompatibilitas EnableVisualStyleValidation tidak didukung 3.0
Sakelar kompatibilitas UseLegacyContextMenuStripSourceControlValue tidak didukung 3.0
Sakelar kompatibilitas UseLegacyImages tidak didukung 3.0
Templat Tentang dan SplashScreen rusak untuk Visual Basic 3.0

.NET Core 3.1

Kontrol yang dihapus

Mulai dari .NET Core 3.1, beberapa kontrol Formulir Windows tidak lagi tersedia.

Deskripsi perubahan

Dimulai dengan .NET Core 3.1, berbagai kontrol Formulir Windows tidak lagi tersedia. Kontrol penggantian yang memiliki desain dan dukungan yang lebih baik diperkenalkan dalam .NET Framework 2.0. Kontrol yang tidak digunakan lagi sebelumnya dihapus dari kotak alat perancang tetapi masih tersedia untuk digunakan.

Jenis berikut ini tidak lagi tersedia:

Versi yang diperkenalkan

3.1

Setiap kontrol yang dihapus memiliki kontrol penggantian yang direkomendasikan. Lihat tabel berikut:

Kontrol yang dihapus (API) Penggantian yang direkomendasikan API terkait yang dihapus
ContextMenu ContextMenuStrip
DataGrid DataGridView DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType
MainMenu MenuStrip
Menu ToolStripDropDown, ToolStripDropDownMenu MenuItemCollection
MenuItem ToolStripMenuItem
ToolBar ToolStrip ToolBarAppearance
ToolBarButton ToolStripButton ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign

Kategori

Formulir Windows

API yang Terpengaruh


Peristiwa CellFormatting tidak dimunculkan jika tipsalat ditampilkan

Sekarang DataGridView memperlihatkan teks sel dan tipsalat kesalahan saat diarahkan kursor ke mouse dan saat dipilih melalui keyboard. Jika tipsalat ditampilkan, DataGridView.CellFormatting peristiwa tidak dinaikkan.

Deskripsi perubahan

Sebelum .NET Core 3.1, DataGridView properti yang diatur ShowCellToolTips untuk true memperlihatkan tipsalat untuk teks dan kesalahan sel saat sel diarahkan oleh mouse. Tipsalat tidak ditampilkan saat sel dipilih melalui keyboard (misalnya, dengan menggunakan tombol Tab, tombol pintasan, atau navigasi panah). Jika pengguna mengedit sel, lalu, saat DataGridView masih dalam mode edit, arahkan mouse ke atas sel yang tidak memiliki ToolTipText kumpulan properti, CellFormatting peristiwa dinaikkan untuk memformat teks sel untuk ditampilkan dalam sel.

Untuk memenuhi standar aksesibilitas, mulai dari .NET Core 3.1, DataGridView yang memiliki ShowCellToolTips properti yang diatur untuk true menampilkan tipsalat untuk teks dan kesalahan sel tidak hanya saat sel diarahkan, tetapi juga saat dipilih melalui keyboard. Sebagai konsekuensi dari perubahan ini, CellFormatting peristiwa tidak dimunculkan ketika sel yang tidak memiliki ToolTipText kumpulan properti diarahkan ke saat DataGridView berada dalam mode edit. Peristiwa tidak dinaikkan karena konten sel yang diarahkan ditampilkan sebagai tipsalat alih-alih ditampilkan dalam sel.

Versi yang diperkenalkan

3.1

Refaktor kode apa pun yang bergantung pada CellFormatting peristiwa saat DataGridView berada dalam mode edit.

Kategori

Formulir Windows

API yang Terpengaruh

Tidak


.NET Core 3.0

Font kontrol default diubah menjadi Segoe UI 9 pt

Deskripsi perubahan

Di .NET Framework, Control.DefaultFont properti diatur ke Microsoft Sans Serif 8.25 pt. Gambar berikut menunjukkan jendela yang menggunakan font default.

Font kontrol default dalam .NET Framework

Mulai dari .NET Core 3.0, font default diatur ke Segoe UI 9 pt (font yang sama dengan SystemFonts.MessageBoxFont). Akibat perubahan ini, formulir dan kontrol berukuran sekitar 27% lebih besar untuk memperhitungkan ukuran font default baru yang lebih besar. Contohnya:

Font kontrol default di .NET Core

Perubahan ini dilakukan untuk menyelaraskan dengan panduan pengalaman pengguna (UX) Windows.

Versi yang diperkenalkan

3.0

Karena perubahan ukuran formulir dan kontrol, pastikan aplikasi Anda dirender dengan benar.

Untuk mempertahankan font asli untuk satu formulir, atur font defaultnya ke Microsoft Sans Serif 8.25 pt. Contohnya:

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

Atau, Anda dapat mengubah font default untuk seluruh aplikasi dengan salah satu cara berikut:

  • Dengan mengatur ApplicationDefaultFont properti MSBuild ke "Microsoft Sans Serif, 8.25pt". Ini adalah teknik yang disukai karena memungkinkan Visual Studio menggunakan pengaturan baru di perancang.

    <PropertyGroup>
      <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont>
    </PropertyGroup>
    
  • Dengan memanggil 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

  • Formulir Windows

API yang Terpengaruh

Tidak ada.


Modernisasi FolderBrowserDialog

Kontrol FolderBrowserDialog telah berubah dalam aplikasi Formulir Windows untuk .NET Core.

Deskripsi perubahan

Dalam .NET Framework, formulir Windows menggunakan dialog berikut untuk FolderBrowserDialog kontrol:

FolderBrowserDialogControl di .NET Framework

Di .NET Core 3.0, Formulir Windows menggunakan kontrol berbasis COM yang lebih baru yang diperkenalkan di Windows Vista:

FolderBrowserDialogControl di .NET Core

Versi yang diperkenalkan

3.0

Dialog akan dimutakhirkan secara otomatis.

Jika Anda ingin mempertahankan dialog asli, atur FolderBrowserDialog.AutoUpgradeEnabled properti ke false sebelum menampilkan dialog, seperti yang diilustrasikan oleh fragmen kode berikut:

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

Kategori

Formulir Windows

API yang Terpengaruh


SerializableAttribute dihapus dari beberapa jenis Formulir Windows

SerializableAttribute telah dihapus dari beberapa kelas Formulir Windows yang tidak memiliki skenario serialisasi biner yang diketahui.

Deskripsi perubahan

Jenis berikut dihiasi dengan SerializableAttribute dalam .NET Framework, tetapi atribut telah dihapus di .NET Core:

Secara historis, mekanisme serialisasi ini memiliki masalah pemeliharaan dan keamanan yang serius. Mempertahankan SerializableAttribute jenis berarti jenis tersebut harus diuji untuk perubahan serialisasi versi-ke-versi dan kemungkinan perubahan serialisasi kerangka kerja ke kerangka kerja. Ini membuatnya lebih sulit untuk mengembangkan jenis-jenis tersebut dan dapat mahal untuk dipertahankan. Jenis-jenis ini tidak memiliki skenario serialisasi biner yang diketahui, yang meminimalkan dampak penghapusan atribut.

Untuk informasi selengkapnya, lihat Serialisasi biner.

Versi yang diperkenalkan

3.0

Perbarui kode apa pun yang mungkin bergantung pada jenis ini yang ditandai sebagai dapat diserialisasikan.

Kategori

Formulir Windows

API yang Terpengaruh

  • Tidak

Sakelar kompatibilitas AllowUpdateChildControlIndexForTabControls tidak didukung

Sakelar Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls kompatibilitas didukung di Formulir Windows pada .NET Framework 4.6 dan versi yang lebih baru tetapi tidak didukung pada .NET Core atau .NET 5.0 dan yang lebih baru.

Deskripsi perubahan

Di .NET Framework 4.6 dan versi yang lebih baru, memilih tab menyusun ulang koleksi kontrolnya. Sakelar Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls kompatibilitas memungkinkan aplikasi untuk melewati pengubahan ulang ini ketika perilaku ini tidak diinginkan.

Di .NET Core dan .NET 5.0 dan yang Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls lebih baru, sakelar tidak didukung.

Versi yang diperkenalkan

3.0

Hapus sakelar. Sakelar tidak didukung, dan tidak ada fungsionalitas alternatif yang tersedia.

Kategori

Formulir Windows

API yang Terpengaruh

  • Tidak

Sakelar kompatibilitas DomainUpDown.UseLegacyScrolling tidak didukung

Sakelar Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling kompatibilitas, yang diperkenalkan dalam .NET Framework 4.7.1, tidak didukung di Formulir Windows pada .NET Core atau .NET 5.0 dan yang lebih baru.

Deskripsi perubahan

Dimulai dengan .NET Framework 4.7.1, Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling sakelar kompatibilitas memungkinkan pengembang untuk menolak independen DomainUpDown.DownButton() dan DomainUpDown.UpButton() tindakan. Sakelar memulihkan perilaku warisan, di mana DomainUpDown.UpButton() diabaikan jika teks konteks ada, dan pengembang diperlukan untuk menggunakan DomainUpDown.DownButton() tindakan pada kontrol sebelum DomainUpDown.UpButton() tindakan. Untuk informasi selengkapnya, lihat <elemen AppContextSwitchOverrides>.

Di .NET Core dan .NET 5.0 dan yang Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling lebih baru, sakelar tidak didukung.

Versi yang diperkenalkan

3.0

Hapus sakelar. Sakelar tidak didukung, dan tidak ada fungsionalitas alternatif yang tersedia.

Kategori

Formulir Windows

API yang Terpengaruh


Sakelar kompatibilitas DoNotLoadLatestRichEditControl tidak didukung

Sakelar Switch.System.Windows.Forms.UseLegacyImages kompatibilitas, yang diperkenalkan dalam .NET Framework 4.7.1, tidak didukung di Formulir Windows pada .NET Core atau .NET 5.0 dan yang lebih baru.

Deskripsi perubahan

Dalam .NET Framework 4.6.2 dan versi sebelumnya, RichTextBox kontrol membuat instans kontrol Win32 RichEdit v3.0, dan untuk aplikasi yang menargetkan .NET Framework 4.7.1, RichTextBox kontrol membuat instans RichEdit v4.1 (dalam msftedit.dll). Sakelar Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl kompatibilitas diperkenalkan untuk memungkinkan aplikasi yang menargetkan .NET Framework 4.7.1 dan versi yang lebih baru untuk memilih keluar dari kontrol RichEdit v4.1 baru dan menggunakan kontrol RichEdit v3 lama sebagai gantinya.

Di .NET Core dan .NET 5.0 dan versi yang lebih baru, sakelar Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl tidak didukung. Hanya versi baru kontrol yang RichTextBox didukung.

Versi yang diperkenalkan

3.0

Hapus sakelar. Sakelar tidak didukung, dan tidak ada fungsionalitas alternatif yang tersedia.

Kategori

Formulir Windows

API yang Terpengaruh


Sakelar kompatibilitas DoNotSupportSelectAllShortcutInMultilineTextBox tidak didukung

Sakelar Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox kompatibilitas, yang diperkenalkan di .NET Framework 4.6.1, tidak didukung di Formulir Windows pada .NET Core dan .NET 5.0 dan yang lebih baru.

Deskripsi perubahan

Dimulai dengan .NET Framework 4.6.1, memilih tombol pintasan Ctrl + A dalam TextBox kontrol memilih semua teks. Di .NET Framework 4.6 dan versi sebelumnya, memilih tombol pintasan Ctrl + A gagal memilih semua teks jika Textbox.ShortcutsEnabled dan TextBox.Multiline properti keduanya diatur ke .true Sakelar Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox kompatibilitas diperkenalkan dalam .NET Framework 4.6.1 untuk mempertahankan perilaku asli. Untuk informasi selengkapnya, lihat TextBox.ProcessCmdKey.

Di .NET Core dan .NET 5.0 dan versi yang lebih baru, sakelar Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox tidak didukung.

Versi yang diperkenalkan

3.0

Hapus sakelar. Sakelar tidak didukung, dan tidak ada fungsionalitas alternatif yang tersedia.

Kategori

Formulir Windows

API yang Terpengaruh

  • Tidak

Sakelar kompatibilitas DontSupportReentrantFilterMessage tidak didukung

Sakelar Switch.System.Windows.Forms.DontSupportReentrantFilterMessage kompatibilitas, yang diperkenalkan di .NET Framework 4.6.1, tidak didukung di Formulir Windows pada .NET Core dan .NET 5.0 dan yang lebih baru.

Deskripsi perubahan

Dimulai dengan .NET Framework 4.6.1, Switch.System.Windows.Forms.DontSupportReentrantFilterMessage sakelar kompatibilitas menangani kemungkinan IndexOutOfRangeException pengecualian ketika pesan dipanggil Application.FilterMessage dengan implementasi kustom IMessageFilter.PreFilterMessage . Untuk informasi selengkapnya, lihat Mitigasi: Implementasi IMessageFilter.PreFilterMessage Kustom.

Di .NET Core dan .NET 5.0 dan yang Switch.System.Windows.Forms.DontSupportReentrantFilterMessage lebih baru, sakelar tidak didukung.

Versi yang diperkenalkan

3.0

Hapus sakelar. Sakelar tidak didukung, dan tidak ada fungsionalitas alternatif yang tersedia.

Kategori

Formulir Windows

API yang Terpengaruh


Sakelar kompatibilitas EnableVisualStyleValidation tidak didukung

Sakelar Switch.System.Windows.Forms.EnableVisualStyleValidation kompatibilitas tidak didukung di Formulir Windows pada .NET Core atau .NET 5.0 dan yang lebih baru.

Deskripsi perubahan

Dalam .NET Framework, Switch.System.Windows.Forms.EnableVisualStyleValidation sakelar kompatibilitas memungkinkan aplikasi untuk menolak validasi gaya visual yang disediakan dalam bentuk numerik.

Di .NET Core dan .NET 5.0 dan yang Switch.System.Windows.Forms.EnableVisualStyleValidation lebih baru, sakelar tidak didukung.

Versi yang diperkenalkan

3.0

Hapus sakelar. Sakelar tidak didukung, dan tidak ada fungsionalitas alternatif yang tersedia.

Kategori

Formulir Windows

API yang Terpengaruh

  • Tidak

Sakelar kompatibilitas UseLegacyContextMenuStripSourceControlValue tidak didukung

Sakelar Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue kompatibilitas, yang diperkenalkan di .NET Framework 4.7.2, tidak didukung di Formulir Windows pada .NET Core atau .NET 5.0 dan yang lebih baru.

Deskripsi perubahan

Dimulai dengan .NET Framework 4.7.2, Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue sakelar kompatibilitas memungkinkan pengembang untuk menolak perilaku ContextMenuStrip.SourceControl baru properti, yang sekarang mengembalikan referensi ke kontrol sumber. Perilaku properti sebelumnya adalah mengembalikan null. Untuk informasi selengkapnya, lihat <elemen AppContextSwitchOverrides>.

Di .NET Core dan .NET 5.0 dan yang Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue lebih baru, sakelar tidak didukung.

Versi yang diperkenalkan

3.0

Hapus sakelar. Sakelar tidak didukung, dan tidak ada fungsionalitas alternatif yang tersedia.

Kategori

Formulir Windows

API yang Terpengaruh


Sakelar kompatibilitas UseLegacyImages tidak didukung

Sakelar Switch.System.Windows.Forms.UseLegacyImages kompatibilitas, yang diperkenalkan di .NET Framework 4.8, tidak didukung di Formulir Windows pada .NET Core atau .NET 5.0 dan yang lebih baru.

Deskripsi perubahan

Dimulai dengan .NET Framework 4.8, Switch.System.Windows.Forms.UseLegacyImages sakelar kompatibilitas mengatasi kemungkinan masalah penskalaan gambar dalam skenario ClickOnce di lingkungan DPI tinggi. Ketika diatur ke true, sakelar memungkinkan pengguna untuk memulihkan penskalakan gambar warisan pada tampilan DPI tinggi yang skalanya diatur ke lebih besar dari 100%. Untuk informasi selengkapnya, lihat Catatan Rilis .NET Framework 4.8 di GitHub.

Di .NET Core dan .NET 5.0 dan yang Switch.System.Windows.Forms.UseLegacyImages lebih baru, sakelar tidak didukung.

Versi yang diperkenalkan

3.0

Hapus sakelar. Sakelar tidak didukung, dan tidak ada fungsionalitas alternatif yang tersedia.

Kategori

Formulir Windows

API yang Terpengaruh

  • Tidak

Templat Tentang dan SplashScreen rusak

File About.vb dan SplashScreen.vb yang dihasilkan oleh Visual Studio berisi referensi ke jenis di My namespace layanan yang tidak tersedia .NET Core 3.0 dan 3.1.

Versi yang diperkenalkan

3.0

Deskripsi perubahan

.NET Core 3.0 dan 3.1 tidak berisi dukungan Visual Basic My penuh. Templat formulir Tentang dan SplashScreen di Visual Studio untuk Visual Basic Formulir Windows properti referensi aplikasi dalam My.Application.Info jenis yang tidak tersedia.

Dukungan Visual Basic My ditingkatkan di .NET 5, tingkatkan proyek Anda ke .NET 5 atau yang lebih baru.

-atau-

Perbaiki kesalahan pengkompilasi di jenis Tentang dan SplashScreen di aplikasi Anda. System.Reflection.Assembly Gunakan kelas untuk mendapatkan informasi yang disediakan oleh jenis .My.Application.Info Port lurus dari kedua bentuk tersedia di sini.

Tip

Ini adalah kode sampel dan tidak optimal. Daftar atribut harus di-cache untuk mengurangi waktu pemuatan formulir.

Tentang

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

Formulir Windows Visual Basic

API yang Terpengaruh

Tidak


Lihat juga