Share via


Vlastnosti návrhu pro vlastní ovládací prvky (model Windows Forms .NET)

Tento článek vás naučí, jak se vlastnosti zpracovávají pro ovládací prvky v model Windows Forms Visual Designeru v sadě Visual Studio.

Každý ovládací prvek dědí mnoho vlastností ze základní třídy System.Windows.Forms.Control, například:

Při vytváření ovládacího prvku můžete definovat nové vlastnosti a řídit, jak se zobrazují v návrháři.

Důležité

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

Definování vlastnosti

Všechny veřejné vlastnosti s přístupovým objektem get definovaným ovládacím prvku se automaticky zobrazí v okně Vlastnosti sady Visual Studio. Pokud vlastnost také definuje objekt set , lze vlastnost změnit v okně Vlastnosti . Vlastnosti však mohou být explicitně zobrazeny nebo skryty v okně Vlastnosti použitím BrowsableAttribute. Tento atribut přebírá jeden logický parametr, který označuje, jestli je zobrazen nebo ne. Další informace o atributech najdete v tématu Atributy (C#) nebo Přehled atributů (Visual Basic).

[Browsable(false)]
public bool IsSelected { get; set; }
<Browsable(False)>
Public Property IsSelected As Boolean

[POZNÁMKA] Komplexní vlastnosti, které nelze implicitně převést na řetězec a z řetězce, vyžadují převaděč typů.

Serializované vlastnosti

Vlastnosti nastavené na ovládacím prvku jsou serializovány do souboru kódu návrháře. K tomu dochází v případě, že je hodnota vlastnosti nastavená na jinou než výchozí hodnotu.

Když návrhář zjistí změnu vlastnosti, vyhodnotí všechny vlastnosti ovládacího prvku a serializuje libovolnou vlastnost, jejíž hodnota neodpovídá výchozí hodnotě vlastnosti. Hodnota vlastnosti je serializována do souboru kód-behid návrháře. Výchozí hodnoty pomáhají návrháři určit, které hodnoty vlastností mají být serializovány.

Výchozí hodnoty

Vlastnost je považována za výchozí hodnotu, pokud buď použije DefaultValueAttribute atribut, nebo třída vlastnosti obsahuje vlastnosti-specifické Reset a ShouldSerialize metody. Další informace o atributech najdete v tématu Atributy (C#) nebo Přehled atributů (Visual Basic).

Nastavením výchozí hodnoty povolíte následující:

  • Vlastnost poskytuje vizuální označení v okně Vlastnosti , pokud byla změněna z výchozí hodnoty.
  • Uživatel může kliknout pravým tlačítkem myši na vlastnost a zvolit Obnovit obnovit vlastnost na výchozí hodnotu.
  • Návrhář generuje efektivnější kód.

Pokud vlastnost používá jednoduchý typ, například primitivní typ, lze výchozí hodnotu nastavit použitím DefaultValueAttribute vlastnosti. Vlastnosti s tímto atributem však nezačínaly automaticky s touto přiřazenou hodnotou. Pole backing vlastnosti musíte nastavit na stejnou výchozí hodnotu. Vlastnost lze nastavit u deklarace nebo v konstruktoru třídy.

Pokud je vlastnost komplexní typ nebo chcete řídit chování návrháře resetování a serializace, definujte Reset<PropertyName> a ShouldSerialize<PropertyName> metody třídy. Pokud například ovládací prvek definuje Age vlastnost, metody jsou pojmenovány ResetAge a ShouldSerializeAge.

Důležité

Buď použijte DefaultValueAttribute vlastnost, nebo zadejte obě Reset<PropertyName> metody.ShouldSerialize<PropertyName> Nepoužívejte obojí.

Vlastnosti můžou být resetovány na výchozí hodnoty v okně Vlastnosti tak, že kliknete pravým tlačítkem na název vlastnosti a vyberete Obnovit.

Položka místní nabídky Obnovit v mřížce vlastností.

Dostupnost možnosti místní nabídky Vlastnosti po kliknutí pravým tlačítkem myši>je povolena v těchto >případech:

  • Vlastnost má DefaultValueAttribute použitý atribut a hodnota vlastnosti neodpovídá hodnotě atributu.
  • Třída vlastnosti definuje metodu Reset<PropertyName> bez .ShouldSerialize<PropertyName>
  • Třída vlastnosti definuje metodu Reset<PropertyName> a ShouldSerialize<PropertyName> vrátí hodnotu true.

Defaultvalueattribute

Pokud hodnota vlastnosti neodpovídá hodnotě poskytnuté DefaultValueAttribute, vlastnost se považuje za změněnou a lze ji resetovat v okně Vlastnosti .

Důležité

Tento atribut by neměl být použit u vlastností, které mají odpovídající Reset<PropertyName> a ShouldSerialize<PropertyName> metody.

Následující kód deklaruje dvě vlastnosti, výčet s výchozí hodnotou a celé číslo North s výchozí hodnotou 10.

[DefaultValue(typeof(Directions), "North")]
public Directions PointerDirection { get; set; } = Directions.North;

[DefaultValue(10)]
public int DistanceInFeet { get; set; } = 10;
<DefaultValue(GetType(Directions), "North")>
Public Property PointerDirection As Directions = Directions.North

<DefaultValue(10)>
Public Property DistanceInFeet As Integer = 10

Resetování a ShouldSerialize

Jak jsme již zmínili, Reset<PropertyName> poskytují a ShouldSerialize<PropertyName> metody příležitost vést nejen chování resetování vlastnosti, ale také při určování, zda je hodnota změněna a měla by být serializována do souboru kódu návrháře. Obě metody spolupracují a neměli byste je definovat bez druhé.

Důležité

Metody Reset<PropertyName> a ShouldSerialize<PropertyName> metody by neměly být vytvořeny pro vlastnost, která má DefaultValueAttributehodnotu .

Při Reset<PropertyName> definování se v okně Vlastnosti zobrazí možnost místní nabídky Obnovit pro tuto vlastnost. Při výběru Reset<PropertyName> funkce Reset je vyvolána metoda. Možnost Obnovit místní nabídku je povolena nebo zakázána tím, co je vráceno metodou ShouldSerialize<PropertyName> . Při ShouldSerialize<PropertyName> návratu trueoznačuje, že vlastnost se změnila z výchozí hodnoty a měla by být serializována do souboru kódu za kódem a povolí možnost Obnovit místní nabídku. Po false vrácení je možnost místní nabídky Reset zakázána a kód na pozadí má odebraný kód sady vlastností.

Tip

Obě metody můžou a měly by být definovány s privátním oborem, aby nevytvládaly veřejné rozhraní API ovládacího prvku.

Následující fragment kódu deklaruje vlastnost s názvem Direction. Chování návrháře této vlastnosti je řízeno metodamiResetDirection.ShouldSerializeDirection

public Directions Direction { get; set; } = Directions.None;

private void ResetDirection() =>
    Direction = Directions.None;

private bool ShouldSerializeDirection() =>
    Direction != Directions.None;
Public Property Direction As Directions = Directions.None

Private Sub ResetDirection()
    Direction = Directions.None
End Sub

Private Function ShouldSerializeDirection() As Boolean
    Return Direction <> Directions.None
End Function

Převaděče typů

I když převaděče typů obvykle převádějí jeden typ na jiný, poskytují také převod řetězců na hodnotu pro mřížku vlastností a další ovládací prvky návrhu. Převod typu String-to-Value umožňuje znázornění složitých vlastností v těchto ovládacích prvcích doby návrhu.

Většina předdefinovaných datových typů (čísla, výčty a další) mají výchozí převaděče typů, které poskytují převody řetězců na hodnotu a provádějí kontroly ověření. Výchozí převaděče typů jsou v System.ComponentModel oboru názvů a jsou pojmenovány po převodu typu. Názvy typů převaděčů používají následující formát: {type name}Converter. Například , StringConverter, TimeSpanConvertera Int32Converter.

Převaděče typů se v době návrhu používají ve velkém rozsahu s oknem Vlastnosti . Převaděč typů lze použít na vlastnost nebo typ pomocí TypeConverterAttribute.

Okno Vlastnosti používá převaděče k zobrazení vlastnosti jako řetězcové hodnoty, pokud TypeConverterAttribute je deklarován ve vlastnosti. Je-li TypeConverterAttribute deklarován u typu, okno Vlastnosti používá převaděč pro každou vlastnost tohoto typu. Převaděč typů také pomáhá serializovat hodnotu vlastnosti v souboru kódu návrháře.

Editory typů

Okno Vlastnosti automaticky používá editor typů pro vlastnost, pokud je typ vlastnosti předdefinovaný nebo známý typ. Například logická hodnota je upravena jako pole se seznamem s hodnotami True a False a DateTime typ používá rozevírací seznam kalendáře.

Důležité

Od rozhraní .NET Framework se změnily vlastní editory typů. Další informace naleznete v tématu Změny návrháře od rozhraní .NET Framework (model Windows Forms .NET).