Sdílet prostřednictvím


Návrhář se změní od rozhraní .NET Framework (Windows Forms .NET).

Visual Designer pro Windows Forms pro .NET má některá vylepšení a změny od rozhraní .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.

Důležité

Dokumentace k desktopové příručce pro .NET 7 a .NET 6 se právě připravuje.

Visual Studio je aplikace založená na rozhraní .NET Framework, a proto je vizuální návrhář, který vidíte pro Windows Form, založen také na rozhraní .NET Framework. S projektem rozhraní .NET Framework běží prostředí sady Visual Studio i aplikace pro Windows Formnavržené v rámci stejného procesu: devenv.exe. To představuje problém při práci s aplikací .NET (nikoli .NET Framework) pro Windows Form. 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ář mimo proces je proces, který se nazývá DesignToolsServer.exe, a spouští se souběžně s procesem devenv.exe sady Visual Studio. Proces DesignToolsServer.exe běží na stejné verzi a platformě .NET, na které je vaše aplikace nastavená, například .NET 7 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ódované pomocí Microsoft.WinForms.Designer.SDK rozhraní API, které jsou k dispozici na NuGetu. Tato knihovna je refaktoringem návrhářů rozhraní .NET Framework pro .NET. Všechny typy návrháře se přesunuly do různých oborů názvů, 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 System.ComponentModel.Design akcí v oboru názvů se přesunuly do Microsoft.DotNet.DesignTools.Designers.Actions oboru názvů.
  • 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 větší režie než starý systém .NET Framework.

Pokud vlastní vlastnosti ovládacího prvku používají editory typů poskytované systémem Windows Forms, můžete použít EditorAttribute k označení vlastností odpovídajícím editorem rozhraní .NET Framework, který chcete použít v sadě Visual Studio. 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: Windows Forms pro projekt .NET Framework, který obsahuje vlastní dialogy uživatelského rozhraní návrháře.
  • Control.Server: Projekt Windows Forms pro .NET, který obsahuje kód vlastního návrháře 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 hostiteli nástrojů sady Visual Studio Windows Formpro .NET a používat knihovnu a návrháře ovládacích prvků.

I když váš editor typů pochází z existujícího editoru, například nebo FileNameEditor, stále musíte vytvořit komunikaci s klientem a serverem proxy objektu, protože ColorEditor jste zadali 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: