Podpora návrhu v době návrhu ve Visual Studio pro vlastní ovládací prvky

Jak jste si všimli při interakci s návrhářem model Windows Forms, existuje mnoho různých funkcí návrhu nabízených ovládacími prvky model Windows Forms. Mezi funkce, které nabízí Návrhář sady Visual Studio, patří řádky přichycení, položky akcí a mřížka vlastností. Všechny tyto funkce nabízejí snadnější způsob interakce a přizpůsobení ovládacího prvku během návrhu. Tento článek obsahuje přehled o tom, jaký druh podpory můžete přidat do vlastních ovládacích prvků, aby bylo prostředí návrhu pro uživatele ovládacích prvků lepší.

Co se liší od rozhraní .NET Framework

Řada základních prvků návrhu vlastních ovládacích prvků zůstala stejná od rozhraní .NET Framework. Pokud ale používáte pokročilejší funkce přizpůsobení návrháře, jako jsou seznamy akcí, převaděče typů, vlastní dialogy, máte několik jedinečných scénářů, které je potřeba zpracovat.

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 rozhraní .NET Framework devenv.exe běží jak prostředí sady Visual Studio, tak aplikace model Windows Forms navržená v rámci stejného procesu. Když pracujete s aplikací ve Windows Forms .NET (nikoli .NET Framework), představuje to problém. Rozhraní .NET i .NET Framework nemůže fungovat ve stejném procesu. V důsledku toho Windows Forms .NET používá jiný návrhář, návrhář "mimo proces".

Návrhář mimo proces je proces označovaný jakoDesignToolsServer.exea běží společně s procesemdevenv.exesady Visual Studio. Proces DesignToolsServer.exe běží ve stejné verzi a platformě, jako je .NET 9 a x64, rozhraní .NET, na kterou cílí vaše aplikace. Pokud vlastní ovládací prvek potřebuje zobrazit uživatelské rozhraní v sadě Visual Studio, musí vlastní ovládací prvek implementovat architekturu klienta-server, aby se usnadnila komunikace do a z devenv.exe. Další informace naleznete v tématu Změny návrháře od rozhraní .NET Framework.

Okno vlastnosti

Okno vlastnosti sady Visual Studio zobrazí vlastnosti a události pro vybraný ovládací prvek nebo formulář. Obvykle se jedná o první bod vlastního přizpůsobení, který provádíte u vlastního ovládacího prvku nebo komponenty.

Následující obrázek znázorňuje ovládací prvek Button vybraný v návrháři vizuálů a mřížka vlastností zobrazující vlastnosti tlačítka:

Návrhář Windows Forms v sadě Visual Studio zobrazující tlačítko a okno vlastností

Můžete řídit některé aspekty zobrazení informací o vlastním ovládacím prvku v mřížce vlastností. Atributy se použijí buď na vlastní třídu ovládacího prvku, nebo vlastnosti třídy.

Atributy pro třídy

Následující tabulka ukazuje atributy, které můžete použít k určení chování vlastních ovládacích prvků a součástí v době návrhu.

Vlastnost Popis
DefaultEventAttribute Určuje výchozí událost komponenty.
DefaultPropertyAttribute Určuje výchozí vlastnost komponenty.
DesignerAttribute Určuje třídu použitou k implementaci služeb v době návrhu pro komponentu.
DesignerCategoryAttribute Určuje, že návrhář třídy patří do určité kategorie.
ToolboxItemAttribute Představuje atribut položky panelu nástrojů.
ToolboxItemFilterAttribute Určuje řetězec filtru a typ filtru, který se má použít pro položku panelu nástrojů.

Atributy pro vlastnosti

Následující tabulka uvádí atributy, které můžete použít u vlastností nebo jiných členů vlastních ovládacích prvků a součástí.

Vlastnost Popis
AmbientValueAttribute Určuje hodnotu, která se má předat vlastnosti, aby vlastnost získala hodnotu z jiného zdroje. To se označuje jako atmosféra.
BrowsableAttribute Určuje, zda má být vlastnost nebo událost zobrazena v okně Vlastnosti .
CategoryAttribute Určuje název kategorie, ve které chcete seskupit vlastnost nebo událost při zobrazení v ovládacím prvku nastaveném PropertyGrid na Categorized režim.
DefaultValueAttribute Určuje výchozí hodnotu vlastnosti.
DescriptionAttribute Určuje popis vlastnosti nebo události.
DisplayNameAttribute Určuje zobrazovaný název vlastnosti, události nebo veřejné metody, která nevrací hodnotu a nepřijímá žádné argumenty.
EditorAttribute Určuje editor, který se má použít ke změně vlastnosti.
EditorBrowsableAttribute Určuje, že vlastnost nebo metoda lze zobrazit v editoru.
HelpKeywordAttribute Určuje kontextové klíčové slovo pro třídu nebo člena.
LocalizableAttribute Určuje, zda má být vlastnost lokalizována.
PasswordPropertyTextAttribute Označuje, že textová reprezentace objektu je skryta znaky, jako jsou hvězdičky.
ReadOnlyAttribute Určuje, zda je vlastnost, ke které je tento atribut vázán, je při návrhu určena jen pro čtení nebo zápis.
RefreshPropertiesAttribute Označuje, že mřížka vlastností by se měla aktualizovat, když se změní přidružená hodnota vlastnosti.
TypeConverterAttribute Určuje, k jakému typu se má použít jako převaděč objektu, ke které je tento atribut vázán.

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

Prostředí pro návrh vlastních ovládacích prvků je možné vylepšit vytvořením přidruženého vlastního návrháře. Ve výchozím nastavení se váš vlastní ovládací prvek zobrazí na návrhové ploše hostitele a vypadá stejně jako během běhu. Pomocí vlastního návrháře můžete vylepšit návrhové zobrazení ovládacího prvku, přidat položky akcí, přichytit řádky a další položky, které můžou uživateli pomoct při určování rozložení a konfigurace ovládacího prvku. Návrhář například v době návrhu ToolStrip přidá uživateli další ovládací prvky pro přidání, odebrání a konfiguraci jednotlivých položek, jak je znázorněno na následujícím obrázku:

Návrhář model Windows Forms v sadě Visual Studio zobrazující rozdělené zobrazení návrhu kontejneru.

Vlastní návrháře můžete vytvořit provedením následujících kroků:

  1. Přidání odkazu na balíček NuGet Microsoft.WinForms.Designer.SDK
  2. Vytvoření typu dědí z Microsoft.DotNet.DesignTools.Designers.ControlDesigner třídy.
  3. Ve třídě uživatelského ovládacího prvku označte třídu atributem System.ComponentModel.DesignerAttribute třídy a předejte typ, který jste vytvořili v předchozím kroku.

Další informace najdete v části Co se liší od rozhraní .NET Framework .

Položky akcí

Akce návrháře jsou kontextové nabídky, které uživateli umožňují rychle provádět běžné úlohy. Například, pokud přidáte TabControl do formuláře, budete přidávat a odebírat záložky z ovládacího prvku. Karty se spravují v okně Vlastnosti prostřednictvím TabPages vlastnosti, která zobrazuje editor kolekcí karet. Místo nutit uživatele, aby vždy procházel seznam Vlastnosti a hledal vlastnost TabPages, TabControl poskytuje tlačítko inteligentní značky, které je viditelné pouze tehdy, když je ovládací prvek vybrán, jak je znázorněno na následujících obrázcích.

Návrhář Windows Forms v sadě Visual Studio, který zobrazuje tlačítko chytré značky ovládacího prvku záložky.

Po výběru inteligentní značky se zobrazí seznam akcí:

Návrhář Windows Forms v sadě Visual Studio zobrazující smart tag tlačítka ovládacího prvku záložky, které zobrazilo seznam akcí.

Když přidáte akce Přidat kartu a Odebrat tabulátor, návrhář ovládacího prvku ji provede tak, abyste ji mohli rychle přidat nebo odebrat.

Vytvoření seznamu položek akce

Seznamy položek akcí jsou poskytovány typem ControlDesigner , který vytvoříte. Následující kroky představují základní průvodce vytvořením vlastního seznamu akcí:

  1. Přidání odkazu na balíček NuGet Microsoft.WinForms.Designer.SDK
  2. Vytvořte novou třídu seznamu akcí, která dědí z Microsoft.DotNet.DesignTools.Designers.Actions.DesignerActionList.
  3. Přidejte vlastnosti do seznamu akcí, ke které má uživatel přístup. Například přidání bool nebo Boolean (v jazyce Visual Basic) vlastnost do třídy vytvoří CheckBox ovládací prvek v seznamu akcí.
  4. Podle pokynů v části Návrháři vlastních ovládacích prvků vytvořte nového návrháře.
  5. Ve třídě návrháře přepište ActionLists vlastnost, která vrací Microsoft.DotNet.DesignTools.Designers.Actions.DesignerActionListCollection typ.
  6. Přidejte seznam akcí do DesignerActionListCollection instance a vraťte ho.

Příklad seznamu akcí najdete v úložišti Model Windows Forms Designer Extensibility Documents &Samples na GitHubu, konkrétně ve TileRepeater.Designer.Server/ControlDesigner složce.

V okně Vlastnosti se většina vlastností snadno upravuje v mřížce, například když je záložním typem vlastnosti výčet, logická hodnota nebo číslo.

Visual Studio okno Vlastnosti pro aplikaci model Windows Forms zobrazující vlastnost zarovnání.

Někdy je vlastnost složitější a vyžaduje vlastní dialogové okno, které může uživatel použít ke změně vlastnosti. Například Font vlastnost je System.Drawing.Font typ, který obsahuje mnoho vlastností, které mění vzhled písma. V okně Vlastnosti to nejde snadno prezentovat, takže tato vlastnost k úpravě písma používá vlastní dialogové okno:

Dialogové okno Písmo sady Visual Studio pro aplikaci model Windows Forms

Pokud vlastnosti vlastního ovládacího prvku používají předdefinované editory typů poskytované model Windows Forms, můžete použít EditorAttribute k označení vlastností odpovídající editor rozhraní .NET Framework, který má Visual Studio používat. 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.

Při odkazování na integrovaný editor typů použijte typ rozhraní .NET Framework, nikoli typ .NET:

[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