Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel leert u hoe eigenschappen worden verwerkt voor besturingselementen in Windows Forms Visual Designer in Visual Studio.
Elk besturingselement neemt veel eigenschappen over van de basisklasse System.Windows.Forms.Control, zoals:
Wanneer u een besturingselement maakt, kunt u nieuwe eigenschappen definiëren en bepalen hoe deze worden weergegeven in de ontwerpfunctie.
Een eigenschap definiëren
Elke openbare eigenschap met een get accessor die is gedefinieerd door een besturingselement, wordt automatisch weergegeven in het venster Eigenschappen van Visual Studio. Als de eigenschap ook een set accessor definieert, kan de eigenschap worden gewijzigd in het venster Eigenschappen . Eigenschappen kunnen echter expliciet worden weergegeven of verborgen in het venster Eigenschappen door het BrowsableAttributetoe te passen. Dit kenmerk gebruikt één Booleaanse parameter om aan te geven of deze al dan niet wordt weergegeven. Zie Attributes (C#) of Attributes overview (Visual Basic)voor meer informatie over kenmerken.
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public bool IsSelected { get; set; }
<Browsable(False)>
<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
Public Property IsSelected As Boolean
Opmerking
Complexe eigenschappen die niet impliciet kunnen worden geconverteerd naar en van een tekenreeks, vereisen een typeconversieprogramma.
Geserialiseerde eigenschappen
Eigenschappen die zijn ingesteld op een besturingselement, worden geserialiseerd in het code-behind-bestand van de ontwerper. Dit gebeurt wanneer de waarde van een eigenschap is ingesteld op iets anders dan de standaardwaarde.
Wanneer de ontwerper een wijziging in een eigenschap detecteert, worden alle eigenschappen voor het besturingselement geëvalueerd en wordt een eigenschap geserialiseerd waarvan de waarde niet overeenkomt met de standaardwaarde voor de eigenschap. De waarde van een eigenschap wordt geserialiseerd in het code-behid-bestand van de ontwerper. Met standaardwaarden kan de ontwerper bepalen welke eigenschapswaarden moeten worden geserialiseerd.
Standaardwaarden
Een eigenschap wordt beschouwd als een standaardwaarde wanneer het DefaultValueAttribute kenmerk wordt toegepast, of de klasse van de eigenschap bevat eigenschappenspecifiek Reset en ShouldSerialize methoden. Zie Attributes (C#) of Attributes overview (Visual Basic)voor meer informatie over kenmerken.
Door een standaardwaarde in te stellen, schakelt u het volgende in:
- De eigenschap geeft visuele indicaties in het venster Eigenschappen als deze is gewijzigd op basis van de standaardwaarde.
- De gebruiker kan met de rechtermuisknop op de eigenschap klikken en opnieuw instellen kiezen om de eigenschap te herstellen naar de standaardwaarde.
- De ontwerpfunctie genereert efficiëntere code.
Als een eigenschap een eenvoudig type gebruikt, zoals een primitief type, kan de standaardwaarde worden ingesteld door de DefaultValueAttribute eigenschap toe te passen. Eigenschappen met dit kenmerk beginnen echter niet automatisch met die toegewezen waarde. U moet het achterliggende veld van de eigenschap instellen op dezelfde standaardwaarde. U kunt de eigenschap instellen voor de declaratie of in de constructor van de klasse.
Wanneer een eigenschap een complex type is of als u het reset- en serialisatiegedrag van de ontwerper wilt beheren, definieert u de Reset<PropertyName> en ShouldSerialize<PropertyName> methoden voor de klasse. Als het besturingselement bijvoorbeeld een Age eigenschap definieert, worden de methoden benoemd ResetAge en ShouldSerializeAge.
Belangrijk
Gebruik de DefaultValueAttribute eigenschap of geef zowel de Reset<PropertyName> als ShouldSerialize<PropertyName> methoden. Meng de twee manieren om de standaardwaarde te definiëren niet.
Eigenschappen kunnen worden 'opnieuw ingesteld' op de standaardwaarden via het venster Eigenschappen door met de rechtermuisknop op de naam van de eigenschap te klikken en Opnieuw instellen te selecteren.
De beschikbaarheid van de optie Eigenschappen>met de rechtermuisknop op>Contextmenu opnieuw instellen is ingeschakeld wanneer:
- De eigenschap heeft het DefaultValueAttribute kenmerk toegepast en de waarde van de eigenschap komt niet overeen met de waarde van het kenmerk.
- De klasse van de eigenschap definieert een
Reset<PropertyName>methode zonder eenShouldSerialize<PropertyName>. - De klasse van de eigenschap definieert een
Reset<PropertyName>methode en retourneertShouldSerialize<PropertyName>true.
StandaardwaardeAttribuut
Als de waarde van een eigenschap niet overeenkomt met de waarde die is DefaultValueAttributeopgegeven door, wordt de eigenschap als gewijzigd beschouwd en kan deze opnieuw worden ingesteld via het venster Eigenschappen .
Belangrijk
Dit kenmerk mag niet worden gebruikt voor eigenschappen die overeenkomende Reset<PropertyName> en ShouldSerialize<PropertyName> methoden hebben.
De volgende code declareert twee eigenschappen, een opsomming met een standaardwaarde van North en een geheel getal met een standaardwaarde van 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
Opnieuw instellen en ShouldSerialiseren
Zoals eerder vermeld bieden de Reset<PropertyName> en ShouldSerialize<PropertyName> methoden de mogelijkheid om niet alleen het resetgedrag van een eigenschap te begeleiden, maar ook om te bepalen of een waarde is gewijzigd en moet worden geserialiseerd in het code-behind-bestand van de ontwerpomgeving. Beide methoden werken samen en u moet er geen definiëren zonder de andere.
Belangrijk
De Reset<PropertyName> en ShouldSerialize<PropertyName> methoden mogen niet worden gemaakt voor een eigenschap met een DefaultValueAttribute.
Wanneer Reset<PropertyName> dit is gedefinieerd, wordt in het venster Eigenschappen een contextmenuoptie Opnieuw instellen voor die eigenschap weergegeven. Wanneer Opnieuw instellen is geselecteerd, wordt de Reset<PropertyName> methode aangeroepen. De optie Contextmenu Opnieuw instellen is ingeschakeld of uitgeschakeld door wat wordt geretourneerd door de ShouldSerialize<PropertyName> methode. Wanneer ShouldSerialize<PropertyName>true retourneert, duidt dit erop dat de eigenschap is veranderd van de standaardwaarde en moet worden geserialiseerd in het code-behind-bestand. Hierdoor wordt de optie Contextmenu opnieuw instellen ingeschakeld. Wanneer false wordt geretourneerd, wordt de contextmenuoptie Opnieuw instellen uitgeschakeld en wordt de code-behind van de eigenschapsinstelling verwijderd.
Aanbeveling
Beide methoden kunnen en moeten worden gedefinieerd met een privébereik, zodat ze geen deel uitmaken van de openbare API van het besturingselement.
Het volgende codefragment declareert een eigenschap met de naam Direction. Het ontwerpgedrag van deze eigenschap wordt bepaald door de ResetDirection en ShouldSerializeDirection methoden.
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
Typeconverters
Hoewel typeconversieprogramma's meestal het ene type naar het andere converteren, bieden ze ook conversie van tekenreeks naar waarde voor het eigenschappenraster en andere ontwerptijdbesturingselementen. Met conversie van tekenreeks naar waarde kunnen complexe eigenschappen worden weergegeven in deze ontwerptijdbesturingselementen.
De meeste ingebouwde gegevenstypen (getallen, opsommingen en andere) hebben standaardtypeconversieprogramma's die conversies van tekenreeks-naar-waarde bieden en validatiecontroles uitvoeren. De standaardtypeconversieprogramma's bevinden zich in de System.ComponentModel naamruimte en hebben de naam van het type dat wordt geconverteerd. De namen van het conversieprogrammatype gebruiken de volgende indeling: {type name}Converter. Bijvoorbeeld, StringConverter, TimeSpanConverteren Int32Converter.
Typeconversieprogramma's worden veelal gebruikt tijdens de ontwerpfase met het venster Eigenschappen. Een typeconversieprogramma kan worden toegepast op een eigenschap of een type, met behulp van de TypeConverterAttribute.
In het venster Eigenschappen worden conversieprogramma's gebruikt om de eigenschap weer te geven als een tekenreekswaarde wanneer de TypeConverterAttribute eigenschap wordt gedeclareerd. Wanneer het TypeConverterAttribute wordt gedeclareerd voor een type, gebruikt het venster Eigenschappen het conversieprogramma voor elke eigenschap van dat type. Het typeconversieprogramma helpt ook bij het serialiseren van de eigenschapswaarde in het code-behind-bestand van de ontwerper.
Type-editors
In het venster Eigenschappen wordt automatisch een typeeditor voor een eigenschap gebruikt wanneer het type van de eigenschap een ingebouwd of bekend type is. Een Booleaanse waarde wordt bijvoorbeeld bewerkt als een keuzelijst met invoervak met waar - en onwaarwaarden en het type maakt gebruik van een vervolgkeuzelijst in de DateTime agenda.
Belangrijk
Aangepaste typeeditors zijn gewijzigd sinds .NET Framework. Voor meer informatie, zie de wijzigingen in de ontwerper sinds .NET Framework.
.NET Desktop feedback