Sdílet prostřednictvím


Změny návrháře v rozhraní .NET Framework (Windows Forms .NET)

Vizuální návrhář pro Windows Forms pro .NET má některá vylepšení a změny ve srovnání s .NET Framework. Tyto změny do značné míry ovlivňují vlastní návrháře ovládacích prvků. Tento článek popisuje klíčové rozdíly od rozhraní .NET Framework.

Visual Studio je aplikace založená na rozhraní .NET Framework, a proto je vizuální návrhář, který vidíte pro model Windows Forms, také založený na rozhraní .NET Framework. S projektem s rozhraním .NET Framework běží prostředí sady Visual Studio i aplikace Windows Forms, které jsou navrhovány, v rámci stejného procesu: devenv.exe. Když pracujete s aplikací ve Windows Forms .NET (nikoli .NET Framework), představuje to problém. Kód rozhraní .NET i .NET Framework nemůžou ve stejném procesu fungovat. V důsledku toho Windows Forms .NET používá jiný návrhář, návrhář "mimo proces".

Návrhář mimo proces

Návrhář, který běží mimo proces, je proces nazvaný DesignToolsServer.exe a je spuštěn po boku procesu devenv.exe v sadě Visual Studio. Proces DesignToolsServer.exe běží na stejné verzi a platformě .NET, na kterou je vaše aplikace nastavená, například .NET 9 a x64.

V návrháři sady Visual Studio jsou objekty proxy rozhraní .NET Framework vytvořeny pro každou komponentu a ovládací prvek v návrháři, které komunikují se skutečnými objekty .NET z vašeho projektu v návrháři DesignToolsServer.exe .

Návrháři ovládacích prvků

Pro .NET musí být návrháři ovládacích prvků kódováni pomocí Microsoft.WinForms.Designer.SDK rozhraní API, k dispozici na NuGetu. Tato knihovna je refaktoringem návrhářů rozhraní .NET Framework pro .NET. Všechny typy návrhářů se přesunuly do různých jmenných prostorů, ale názvy typů jsou většinou stejné. Pokud chcete aktualizovat návrháře rozhraní .NET Framework pro .NET, musíte obory názvů trochu upravit.

  • Třídy návrháře a další související typy, například ControlDesigner a ComponentTray, se přesunuly z System.Windows.Forms.Design oboru názvů do Microsoft.DotNet.DesignTools.Designers oboru názvů.
  • Typy související se seznamem akcí v oboru názvů System.ComponentModel.Design byly přesunuty do oboru názvů Microsoft.DotNet.DesignTools.Designers.Actions.
  • Typy související s chováním, jako jsou doplňky a moduly snapline, se v System.Windows.Forms.Design.Behavior oboru názvů přesunuly do Microsoft.DotNet.DesignTools.Designers.Behaviors oboru názvů.

Vlastní editory typů

Vlastní editory typů jsou složitější než návrháři ovládacích prvků. Vzhledem k tomu, že proces sady Visual Studio je založený na rozhraní .NET Framework, musí být také jakékoli uživatelské rozhraní zobrazené v kontextu sady Visual Studio založené na rozhraní .NET Framework. Tento návrh představuje problém, například při vytváření ovládacího prvku .NET, který zobrazuje vlastní editor typů vyvolaný kliknutím na tlačítko v mřížce vlastností. Dialogové okno nelze zobrazit v kontextu sady Visual Studio.

Návrhář mimo proces zpracovává většinu funkcí návrháře ovládacích prvků, jako jsou doplňky, předdefinované editory typů a vlastní malování. Kdykoli potřebujete zobrazit vlastní modální dialogové okno, například zobrazení nového editoru typů, musíte replikovat komunikaci mezi klientem a serverem proxy objektu, kterou poskytuje návrhář mimo proces. Tím se vytvoří mnohem vyšší režijní náklady než u starého systému .NET Framework.

Pokud vaše vlastní vlastnosti ovládacího prvku používají editory typů poskytované systémem Windows Forms, můžete vlastnosti EditorAttribute označit odpovídajícím editorem rozhraní .NET Framework, který chcete, aby Visual Studio použilo. Použitím integrovaných editorů se vyhnete požadavkům replikace komunikace mezi klientem a serverem proxy objektu poskytovanou návrhářem mimo proces.

[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

Vytvoření editoru typů

Pokud chcete vytvořit vlastní návrháře, kteří poskytují editory typů, budete potřebovat celou řadu projektů, jak je popsáno v následujícím seznamu:

  • Control: Tento projekt je vaše vlastní knihovna ovládacích prvků, která obsahuje kód pro ovládací prvky. Jedná se o knihovnu, na kterou by uživatel odkazoval, když chce používat vaše ovládací prvky.
  • Control.Client: Projekt Windows Forms pro .NET Framework, který obsahuje vaše vlastní návrhářská dialogová okna uživatelského rozhraní.
  • Control.Server: Windows Forms projekt pro .NET, který obsahuje kód vlastního návrhu pro vaše ovládací prvky.
  • Control.Protocol: Projekt .NET Standard, který obsahuje třídy komunikace používané projekty Control.Client i Control.Server projekty.
  • Control.Package: Projekt balíčku NuGet, který obsahuje všechny ostatní projekty. Tento balíček je formátován způsobem, který umožňuje Windows Forms ve Visual Studio hostit a používat vaši knihovnu ovládacích prvků a návrháře.

I když váš editor typů pochází z existujícího editoru, například ColorEditor nebo FileNameEditor, stále musíte vytvořit komunikaci mezi proxy objektem a klientem-serverem, protože jste poskytli nový typ třídy uživatelského rozhraní, který chcete zobrazit v kontextu sady Visual Studio. Kód pro implementaci editoru typů do sady Visual Studio je ale mnohem jednodušší.

Důležité

Probíhá dokumentace, která popisuje tento scénář podrobně. Dokud nebude tato dokumentace publikovaná, použijte následující blogový příspěvek a ukázku, který vás provede vytvořením, publikováním a použitím této struktury projektu: