Bagikan melalui


Apa yang baru untuk .NET 7 (Formulir Windows .NET)

Artikel ini menjelaskan beberapa fitur dan penyempurnaan Formulir Windows baru di .NET 7.

Ada beberapa perubahan yang melanggar yang harus Anda waspadai saat bermigrasi dari .NET Framework ke .NET 7. Untuk informasi selengkapnya, lihat Melanggar perubahan di Formulir Windows.

Peningkatan DPI tinggi

Penyajian DPI tinggi dengan PerMonitorV2 telah ditingkatkan:

  • Menskalakan kontrol berlapis dengan benar. Misalnya, tombol yang ada di panel, yang ditempatkan di halaman tab.

  • Skala Form.MaximumSize dan Form.MinimumSize properti berdasarkan pengaturan DPI monitor saat ini untuk aplikasi yang berjalan ApplicationHighDpiMode diatur ke PerMonitorV2.

    Di .NET 7, fitur ini dinonaktifkan secara default dan Anda harus memilih untuk menerima perubahan ini. Dimulai dengan .NET 8, fitur ini diaktifkan secara default dan Anda perlu menolaknya untuk kembali ke perilaku sebelumnya.

    Untuk mengaktifkan fitur, atur configProperties pengaturan di runtimeconfig.json:

    {
      "runtimeOptions": {
        "tfm": "net7.0",
        "frameworks": [
            ...
        ],
        "configProperties": {
          "System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi": true,
        }
      }
    }
    

Peningkatan dan perbaikan aksesibilitas

Rilis ini menambahkan peningkatan lebih lanjut pada aksesibilitas, termasuk tetapi tidak terbatas pada item berikut:

Peningkatan pengikatan data (pratinjau)

Sementara Formulir Windows sudah memiliki mesin pengikatan yang kuat, bentuk pengikatan data yang lebih modern, mirip dengan pengikatan data yang disediakan oleh WPF, sedang diperkenalkan.

Fitur pengikatan data baru memungkinkan Anda untuk sepenuhnya merangkul pola MVVM dan penggunaan pemeta relasional objek dari ViewModels di Formulir Windows lebih mudah daripada sebelumnya. Ini, pada gilirannya, memungkinkan untuk mengurangi kode dalam file code-behind, dan membuka kemungkinan pengujian baru. Yang lebih penting, ini memungkinkan berbagi kode antara Formulir Windows dan kerangka kerja GUI .NET lainnya seperti WPF, UWP/WinUI, dan .NET MAUI. Dan untuk mengklarifikasi pertanyaan yang umum diajukan, tidak ada rencana untuk memperkenalkan XAML dalam Formulir Windows.

Fitur pengikatan data baru ini dalam pratinjau untuk .NET 7, dan lebih banyak pekerjaan pada fitur ini akan terjadi di .NET 8.

Untuk mengaktifkan pengikatan baru, tambahkan pengaturan ke EnablePreviewFeatures file proyek Anda. Ini didukung di C# dan Visual Basic.

<Project Sdk="Microsoft.NET.Sdk">

  <!-- other settings -->

  <PropertyGroup>
    <EnablePreviewFeatures>true</EnablePreviewFeatures>
  </PropertyGroup>

</Project>

Cuplikan kode berikut menunjukkan properti, peristiwa, dan metode baru yang ditambahkan ke berbagai kelas di Formulir Windows. Meskipun contoh kode berikut ada di C#, contoh kode ini juga berlaku untuk Visual Basic.

public class Control  {
    [BindableAttribute(true)]
    public virtual object DataContext { get; set; }
    [BrowsableAttribute(true)]
    public event EventHandler DataContextChanged;
    protected virtual void OnDataContextChanged(EventArgs e);
    protected virtual void OnParentDataContextChanged(EventArgs e);
}

[RequiresPreviewFeaturesAttribute]
public abstract class BindableComponent : Component, IBindableComponent, IComponent, IDisposable {
    protected BindableComponent();
    public BindingContext? BindingContext { get; set; }
    public ControlBindingsCollection DataBindings { get; }
    public event EventHandler BindingContextChanged;
    protected virtual void OnBindingContextChanged(EventArgs e);
}

public abstract class ButtonBase : Control {
    [BindableAttribute(true)]
    [RequiresPreviewFeaturesAttribute]
    public ICommand? Command { get; set; }
    [BindableAttribute(true)]
    public object? CommandParameter { [RequiresPreviewFeaturesAttribute] get; [RequiresPreviewFeaturesAttribute] set; }
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler? CommandCanExecuteChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler? CommandChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler? CommandParameterChanged;
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandCanExecuteChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandParameterChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnRequestCommandExecute(EventArgs e);
}

public abstract class ToolStripItem : BindableComponent, IComponent, IDisposable, IDropTarget {
    [BindableAttribute(true)]
    [RequiresPreviewFeaturesAttribute]
    public ICommand Command { get; set; }
    [BindableAttribute(true)]
    public object CommandParameter { [RequiresPreviewFeaturesAttribute] get; [RequiresPreviewFeaturesAttribute] set; }
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler CommandCanExecuteChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler CommandChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler CommandParameterChanged;
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandCanExecuteChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandParameterChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnRequestCommandExecute(EventArgs e);
}

Perbaikan lain-lain

Berikut adalah beberapa perubahan penting lainnya:

  • Penanganan seret dan letakkan cocok dengan fungsionalitas seret dan letakkan Windows dengan efek tampilan yang lebih kaya seperti ikon dan label teks.
  • Dialog folder dan file memungkinkan opsi lainnya:
    • Tambahkan ke baru-baru ini
    • Periksa akses tulis
    • Mode diperluas
    • OK memerlukan interaksi
    • Pilih baca-saja
    • Perlihatkan file tersembunyi
    • Perlihatkan tempat yang disematkan
    • Perlihatkan pratinjau
  • ErrorProvider memiliki HasErrors properti sekarang.
  • Tata letak snap formulir diperbaiki untuk Windows 11.

Baca juga