Aracılığıyla paylaş


Tasarımcı .NET Framework 'ten (Windows.NET Form) sonra değişir

.NET için Windows Formiçin Görsel Tasarımcı.NET Framework'ten bu yana bazı iyileştirmeler ve değişiklikler yaptı. Bu değişiklikler özel denetim tasarımcılarını büyük ölçüde etkiler. Bu makalede .NET Framework ile arasındaki temel farklar açıklanmaktadır.

Visual Studio .NET Framework tabanlı bir uygulamadır ve bu nedenle Windows Formiçin gördüğünüz Görsel Tasarımcı da .NET Framework'e dayanır. .NET Framework projesiyle, hem Visual Studio ortamı hem de Windows Formuygulaması tasarlanırken, aynı işlem içinde çalışır: devenv.exe. Bir Windows Form.NET (.NET Framework değil) uygulamasıyla çalışırken bu sorun oluşturur. .NET ve .NET Framework kodu aynı işlem içinde çalışamaz. Sonuç olarak, Windows Form'un .NET'i "işlem dışı" tasarımcı olan farklı bir tasarımcı kullanır.

İşlem dışı tasarımcı

İşlem dışı tasarımcı, DesignToolsServer.exe adlı bir işlemdir ve Visual Studio'nun devenv.exe işlemi boyunca çalıştırılır. DesignToolsServer.exe işlemi, uygulamanızın hedef olarak ayarlandığı .NET 7 ve x64 gibi aynı .NET sürümünde ve platformunda çalışır.

Visual Studio tasarımcısında, tasarımcıdaki her bileşen ve denetim için .NET Framework proxy nesneleri oluşturulur ve bu nesneler, DesignToolsServer.exe tasarımcısındaki projenizdeki gerçek .NET nesneleriyle iletişim kurar.

Denetim tasarımcıları

.NET için denetim tasarımcılarının NuGet'te bulunan API ile Microsoft.WinForms.Designer.SDK kodlanması gerekir. Bu kitaplık, .NET için .NET Framework tasarımcılarının yeniden düzenlenmesidir. Tüm tasarımcı türleri farklı ad alanlarına taşındı, ancak tür adları çoğunlukla aynıdır. .NET için .NET Framework tasarımcılarınızı güncelleştirmek için ad alanlarını biraz ayarlamanız gerekir.

  • Tasarımcı sınıfları ve ve ComponentTraygibi ControlDesigner diğer ilgili türler ad alanından System.Windows.Forms.Design ad alanına Microsoft.DotNet.DesignTools.Designers taşındı.
  • Ad alanında System.ComponentModel.Design eylem listesiyle ilgili türler ad alanına taşındı Microsoft.DotNet.DesignTools.Designers.Actions .
  • Ad alanında, donatıcılar ve ek çizgiler System.Windows.Forms.Design.Behavior gibi davranışla ilgili türler ad alanına Microsoft.DotNet.DesignTools.Designers.Behaviors taşındı.

Özel tür düzenleyicileri

Özel tür düzenleyicileri, denetim tasarımcılarından daha karmaşıktır. Visual Studio işlemi .NET Framework tabanlı olduğundan, Visual Studio bağlamında gösterilen tüm kullanıcı arabirimleri de .NET Framework tabanlı olmalıdır. Bu tasarım, örneğin özellik kılavuzundaki düğmeye tıklayarak çağrılan özel bir tür düzenleyicisini gösteren bir .NET denetimi oluştururken bir sorun oluşturur. İletişim kutusu Visual Studio bağlamında gösterilemiyor.

İşlem dışı tasarımcı, donatıcılar, yerleşik tür düzenleyicileri ve özel boyama gibi denetim tasarımcısı özelliklerinin çoğunu işler. Yeni tür düzenleyicisini görüntüleme gibi özel bir kalıcı iletişim kutusu göstermeniz gerektiğinde, işlem dışı tasarımcının sağladığı proxy-object istemci-sunucu iletişimini çoğaltmanız gerekir. Bu, eski .NET Framework sisteminden çok daha fazla ek yük oluşturur.

Özel denetim özellikleriniz Windows Formtarafından sağlanan tür düzenleyicilerini kullanıyorsa, özelliklerini Visual Studio'nun kullanmasını istediğiniz karşılık gelen .NET Framework düzenleyicisiyle işaretlemek için kullanabilirsiniz EditorAttribute . Yerleşik düzenleyicileri kullanarak, işlem dışı tasarımcı tarafından sağlanan proxy-object istemci-sunucu iletişimini çoğaltma gereksinimini ortadan kaldırırsınız.

[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

Tür düzenleyicisi oluşturma

Tür düzenleyicileri sağlayan özel tasarımcılar oluşturmak için, aşağıdaki listede açıklandığı gibi çeşitli projelere ihtiyacınız vardır:

  • Control: Bu proje, denetimlerinizin kodunu içeren özel denetim kitaplığınızdır. Bu, bir kullanıcının denetimlerinizi kullanmak istediğinde başvuracağı kitaplıktır.
  • Control.Client: Özel tasarımcı kullanıcı arabirimi iletişim kutularınızı içeren .NET Framework için Windows Forms projesi.
  • Control.Server: Denetimleriniz için özel tasarımcı kodunu içeren .NET için Windows Formprojesi.
  • Control.Protocol: ve Control.Server projeleri tarafından Control.Client kullanılan iletişim sınıflarını içeren bir .NET Standard projesi.
  • Control.Package: Diğer tüm projeleri içeren bir NuGet paket projesi. Bu paket, .NET araç konağı için Visual Studio Windows Forms'nin denetim kitaplığınızı ve tasarımcılarınızı kullanmasını sağlayacak şekilde biçimlendirilir.

Tür düzenleyiciniz veya FileNameEditorgibi ColorEditor mevcut bir düzenleyiciden türetilmiş olsa bile, Visual Studio bağlamında görüntülemek istediğiniz yeni bir kullanıcı arabirimi sınıf türü sağladığınızdan bu proxy-object istemci-sunucu iletişimini oluşturmanız gerekir. Ancak, bu tür düzenleyicisini Visual Studio'ya uygulamak için kod çok daha basittir.

Önemli

Bu senaryo hakkında ayrıntılı bilgi veren belgeler devam etmektedir. Bu belgeler yayımlanana kadar aşağıdaki blog gönderisini ve örneğini kullanarak bu proje yapısını oluşturma, yayımlama ve kullanma konusunda size yol gösterebilirsiniz: