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.
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.
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>
aShouldSerialize<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 true
označ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).
.NET Desktop feedback