Proprietà della fase di progettazione per i controlli personalizzati (Windows Form .NET)
Questo articolo illustra come vengono gestite le proprietà per i controlli nella Windows Form Progettazione visiva in Visual Studio.
Ogni controllo eredita molte proprietà dalla classe System.Windows.Forms.Controlbase , ad esempio:
Quando si crea un controllo, è possibile definire nuove proprietà e controllare la modalità di visualizzazione nella finestra di progettazione.
Qualsiasi proprietà pubblica con una funzione di accesso get definita da un controllo è automaticamente visibile nella finestra Proprietà di Visual Studio. Se la proprietà definisce anche una funzione di accesso set , la proprietà può essere modificata nella finestra Proprietà . Tuttavia, le proprietà possono essere visualizzate o nascoste in modo esplicito dalla finestra Proprietà applicando .BrowsableAttribute Questo attributo accetta un singolo parametro booleano per indicare se viene visualizzato o meno. Per altre informazioni sugli attributi, vedere Cenni preliminari sugli attributi (C#) o attributi (Visual Basic).
[Browsable(false)]
public bool IsSelected { get; set; }
<Browsable(False)>
Public Property IsSelected As Boolean
[NOTA] Le proprietà complesse che non possono essere convertite in modo implicito in e da una stringa richiedono un convertitore di tipi.
Le proprietà impostate su un controllo vengono serializzate nel file code-behind della finestra di progettazione. Ciò si verifica quando il valore di una proprietà è impostato su un valore diverso dal valore predefinito.
Quando la finestra di progettazione rileva una modifica a una proprietà, valuta tutte le proprietà per il controllo e serializza qualsiasi proprietà il cui valore non corrisponde al valore predefinito per la proprietà. Il valore di una proprietà viene serializzato nel file code-behid della finestra di progettazione. I valori predefiniti consentono alla finestra di progettazione di determinare quali valori delle proprietà devono essere serializzati.
Una proprietà viene considerata un valore predefinito quando si applica l'attributo DefaultValueAttribute o la classe della proprietà contiene metodi e ShouldSerialize
specifici Reset
della proprietà. Per altre informazioni sugli attributi, vedere Cenni preliminari sugli attributi (C#) o attributi (Visual Basic).
Impostando un valore predefinito, si abilita quanto segue:
- La proprietà fornisce indicazioni visive nella finestra Proprietà se è stata modificata dal valore predefinito.
- L'utente può fare clic con il pulsante destro del mouse sulla proprietà e scegliere Reimposta per ripristinare il valore predefinito della proprietà.
- La finestra di progettazione genera codice più efficiente.
Se una proprietà utilizza un tipo semplice, ad esempio un tipo primitivo, il valore predefinito può essere impostato applicando alla DefaultValueAttribute
proprietà . Tuttavia, le proprietà con questo attributo non iniziano automaticamente con quel valore assegnato. È necessario impostare il campo sottostante della proprietà sullo stesso valore predefinito. È possibile impostare la proprietà sulla dichiarazione o nel costruttore della classe.
Quando una proprietà è un tipo complesso o si desidera controllare il comportamento di reimpostazione e serializzazione della finestra di progettazione, definire i Reset<PropertyName>
metodi e ShouldSerialize<PropertyName>
nella classe . Ad esempio, se il controllo definisce una Age
proprietà, i metodi sono denominati ResetAge
e ShouldSerializeAge
.
Importante
Applicare l'oggetto DefaultValueAttribute
alla proprietà oppure specificare entrambi Reset<PropertyName>
i metodi e ShouldSerialize<PropertyName>
. Non usare entrambi.
Le proprietà possono essere "reimpostate" sui valori predefiniti tramite la finestra Proprietà facendo clic con il pulsante destro del mouse sul nome della proprietà e scegliendo Reimposta.
La disponibilità dell'opzione di>>menu di scelta rapida Reimposta proprietà è abilitata quando:
- La proprietà ha l'attributo DefaultValueAttribute applicato e il valore della proprietà non corrisponde al valore dell'attributo.
- La classe della proprietà definisce un
Reset<PropertyName>
metodo senza un oggettoShouldSerialize<PropertyName>
. - La classe della proprietà definisce un
Reset<PropertyName>
metodo e restituisceShouldSerialize<PropertyName>
true.
Se il valore di una proprietà non corrisponde al valore fornito da DefaultValueAttribute, la proprietà viene considerata modificata e può essere reimpostata tramite la finestra Proprietà .
Importante
Questo attributo non deve essere usato nelle proprietà che dispongono di metodi e ShouldSerialize<PropertyName>
corrispondentiReset<PropertyName>
.
Il codice seguente dichiara due proprietà, un'enumerazione con un valore predefinito e North
un numero intero con un valore predefinito pari a 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
Come accennato in precedenza, i Reset<PropertyName>
metodi e ShouldSerialize<PropertyName>
offrono la possibilità di guidare non solo il comportamento di reimpostazione di una proprietà, ma anche di determinare se un valore viene modificato e deve essere serializzato nel file code-behind della finestra di progettazione. Entrambi i metodi interagiscono e non è consigliabile definirne uno senza l'altro.
Importante
I Reset<PropertyName>
metodi e ShouldSerialize<PropertyName>
non devono essere creati per una proprietà con un oggetto DefaultValueAttribute.
Quando Reset<PropertyName>
viene definita, nella finestra Proprietà viene visualizzata un'opzione di menu di scelta rapida Reimposta per tale proprietà. Quando si seleziona Reimposta , viene richiamato il Reset<PropertyName>
metodo . L'opzione di menu di scelta rapida Reimposta è abilitata o disabilitata da ciò che viene restituito dal ShouldSerialize<PropertyName>
metodo . Quando ShouldSerialize<PropertyName>
restituisce true
, indica che la proprietà è stata modificata rispetto al valore predefinito e deve essere serializzata nel file code-behind e abilita l'opzione di menu di scelta rapida Reimposta . Quando false
viene restituito, l'opzione di menu di scelta rapida Reimposta è disabilitata e il code-behind ha rimosso il codice del set di proprietà.
Suggerimento
Entrambi i metodi possono e devono essere definiti con ambito privato in modo che non costituiscono l'API pubblica del controllo.
Il frammento di codice seguente dichiara una proprietà denominata Direction
. Il comportamento della finestra di progettazione di questa proprietà è controllato dai ResetDirection
metodi e 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
Mentre i convertitori di tipi convertono in genere un tipo in un altro, forniscono anche la conversione da stringa a valore per la griglia delle proprietà e altri controlli in fase di progettazione. La conversione da stringa a valore consente di rappresentare proprietà complesse in questi controlli in fase di progettazione.
La maggior parte dei tipi di dati predefiniti (numeri, enumerazioni e altri) include convertitori di tipi predefiniti che forniscono conversioni da stringa a valore ed eseguono controlli di convalida. I convertitori di tipi predefiniti si trovano nello spazio dei System.ComponentModel
nomi e sono denominati dopo la conversione del tipo. I nomi dei tipi di convertitore usano il formato seguente: {type name}Converter
. Ad esempio, StringConverter, TimeSpanConverter, e Int32Converter.
I convertitori di tipi vengono usati ampiamente in fase di progettazione con la finestra Proprietà . Un convertitore di tipi può essere applicato a una proprietà o a un tipo utilizzando .TypeConverterAttribute
La finestra Proprietà utilizza convertitori per visualizzare la proprietà come valore stringa quando l'oggetto TypeConverterAttribute
viene dichiarato nella proprietà . Quando l'oggetto TypeConverterAttribute
viene dichiarato in un tipo, nella finestra Proprietà viene utilizzato il convertitore in ogni proprietà di tale tipo. Il convertitore di tipi consente anche di serializzare il valore della proprietà nel file code-behind della finestra di progettazione.
La finestra Proprietà usa automaticamente un editor di tipi per una proprietà quando il tipo della proprietà è un tipo predefinito o noto. Ad esempio, un valore booleano viene modificato come casella combinata con valori True e False e il DateTime tipo usa un elenco a discesa del calendario.
Importante
Gli editor di tipi personalizzati sono stati modificati da .NET Framework. Per altre informazioni, vedere Modifiche della finestra di progettazione rispetto a .NET Framework (Windows Form .NET).
Feedback su .NET Desktop feedback
.NET Desktop feedback è un progetto di open source. Selezionare un collegamento per fornire feedback: