Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
aComponentTray
, se přesunuly zSystem.Windows.Forms.Design
oboru názvů doMicrosoft.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 doMicrosoft.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é projektyControl.Client
iControl.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:
.NET Desktop feedback