Bagikan melalui


Perancang berubah sejak .NET Framework (Windows Forms .NET)

Visual Designer untuk Windows Forms untuk .NET telah memiliki beberapa peningkatan dan perubahan sejak .NET Framework. Perubahan ini sebagian besar memengaruhi perancang kontrol kustom. Artikel ini menjelaskan perbedaan utama dari .NET Framework.

Visual Studio adalah aplikasi berbasis .NET Framework, dan dengan demikian, Visual Designer yang Anda lihat untuk Windows Forms juga didasarkan pada .NET Framework. Dengan proyek .NET Framework, lingkungan Visual Studio dan aplikasi Windows Formyang dirancang, berjalan dalam proses yang sama: devenv.exe. Ini menimbulkan masalah saat Anda bekerja dengan aplikasi .NET (bukan .NET Framework) Windows Form. Kode .NET dan .NET Framework tidak dapat berfungsi dalam proses yang sama. Akibatnya, Windows Forms .NET menggunakan perancang yang berbeda, perancang "di luar proses".

Perancang di luar proses

Perancang di luar proses adalah proses yang disebut DesignToolsServer.exe, dan dijalankan bersama proses devenv.exe Visual Studio. Proses DesignToolsServer.exe berjalan pada versi dan platform .NET yang sama dengan yang telah disiapkan aplikasi Anda ke target, seperti .NET 7 dan x64.

Di perancang Visual Studio, objek proksi .NET Framework dibuat untuk setiap komponen dan kontrol pada perancang, yang berkomunikasi dengan objek .NET nyata dari proyek Anda di perancang DesignToolsServer.exe .

Perancang kontrol

Untuk .NET, perancang kontrol perlu dikodekan dengan Microsoft.WinForms.Designer.SDK API, tersedia di NuGet. Pustaka ini adalah refaktor perancang .NET Framework untuk .NET. Semua jenis perancang telah dipindahkan ke namespace layanan yang berbeda tetapi nama jenisnya sebagian besar sama. Untuk memperbarui perancang .NET Framework untuk .NET, Anda harus menyesuaikan namespace layanan sedikit.

  • Kelas perancang dan jenis terkait lainnya, seperti ControlDesigner dan ComponentTray, telah berpindah dari System.Windows.Forms.Design namespace ke Microsoft.DotNet.DesignTools.Designers namespace.
  • Jenis terkait daftar tindakan di System.ComponentModel.Design namespace telah dipindahkan ke Microsoft.DotNet.DesignTools.Designers.Actions namespace layanan.
  • Jenis terkait perilaku, seperti pujaan dan snapline, di System.Windows.Forms.Design.Behavior namespace telah dipindahkan ke Microsoft.DotNet.DesignTools.Designers.Behaviors namespace layanan.

Editor jenis kustom

Editor jenis kustom lebih rumit daripada perancang kontrol. Karena proses Visual Studio berbasis .NET Framework, UI apa pun yang ditampilkan dalam konteks Visual Studio juga harus berbasis .NET Framework. Desain ini menimbulkan masalah, misalnya, saat Anda membuat kontrol .NET yang menunjukkan editor jenis kustom yang dipanggil dengan mengklik tombol di kisi properti. Dialog tidak dapat ditampilkan dalam konteks Visual Studio.

Perancang di luar proses menangani sebagian besar fitur perancang kontrol, seperti penata, editor jenis bawaan, dan lukisan kustom. Kapan saja Anda perlu menampilkan dialog modal kustom, seperti menampilkan editor jenis baru, Anda perlu mereplikasi komunikasi server klien objek proksi yang disediakan perancang di luar proses. Ini menciptakan lebih banyak overhead daripada sistem .NET Framework lama.

Jika properti kontrol kustom Anda menggunakan editor jenis yang disediakan oleh Windows Forms, Anda dapat menggunakan EditorAttribute untuk menandai properti Anda dengan editor .NET Framework yang sesuai yang Anda inginkan untuk digunakan Visual Studio. Dengan menggunakan editor bawaan, Anda menghindari persyaratan replikasi komunikasi server klien objek proksi yang disediakan oleh perancang di luar proses.

[Editor("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
        "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public string? Filename { get; set; }
<Editor("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")>
Public Property Filename As String

Membuat editor jenis

Untuk membuat desainer kustom yang menyediakan editor jenis, Anda memerlukan berbagai proyek, seperti yang dijelaskan dalam daftar berikut:

  • Control: Proyek ini adalah pustaka kontrol kustom Anda yang berisi kode untuk kontrol Anda. Ini adalah pustaka yang akan dirujuk pengguna saat mereka ingin menggunakan kontrol Anda.
  • Control.Client: Windows Formuntuk proyek .NET Framework yang berisi dialog antarmuka pengguna perancang kustom Anda.
  • Control.Server: Windows Formuntuk proyek .NET yang berisi kode perancang kustom untuk kontrol Anda.
  • Control.Protocol: Proyek .NET Standard yang berisi kelas komunikasi yang digunakan oleh Control.Client proyek dan Control.Server .
  • Control.Package: Proyek paket NuGet yang berisi semua proyek lainnya. Paket ini diformat dengan cara yang memungkinkan Visual Studio Windows Forms untuk host alat .NET dan menggunakan pustaka kontrol dan desainer Anda.

Bahkan jika editor jenis Anda berasal dari editor yang ada, seperti ColorEditor atau FileNameEditor, Anda masih harus membuat komunikasi server klien objek proksi karena Anda telah menyediakan jenis kelas UI baru yang ingin Anda tampilkan dalam konteks Visual Studio. Namun, kode untuk mengimplementasikan editor jenis tersebut ke Visual Studio jauh lebih sederhana.

Penting

Dokumentasi yang menjelaskan skenario ini secara rinci sedang berlangsung. Hingga dokumentasi tersebut diterbitkan, gunakan posting blog dan sampel berikut untuk memandu Anda dalam membuat, menerbitkan, dan menggunakan struktur proyek ini: