Definizione di una proprietà nei controlli Windows FormDefining a Property in Windows Forms Controls

Per una panoramica delle proprietà, vedere Cenni preliminari sulle proprietà.For an overview of properties, see Properties Overview. Quando si definisce una proprietà sono da considerare i seguenti elementi:There are a few important considerations when defining a property:

  • È necessario applicare attributi alle proprietà definite.You must apply attributes to the properties you define. Gli attributi specificano l'aspetto di una proprietà in una progettazione.Attributes specify how the designer should display a property. Per informazioni dettagliate, vedere Attributi per componenti in fase di progettazione.For details, see Design-Time Attributes for Components.

  • Se la modifica della proprietà influisca sulla visualizzazione del controllo, chiamare il Invalidate metodo (da Controlcui il controllo eredita) dalla set funzione di accesso.If changing the property affects the visual display of the control, call the Invalidate method (that your control inherits from Control) from the set accessor. Invalidatechiama a sua volta OnPaint il metodo, che consente di ricreare il controllo.Invalidate in turn calls the OnPaint method, which redraws the control. Più chiamate a Invalidate hanno come risultato una singola chiamata OnPaint a per l'efficienza.Multiple calls to Invalidate result in a single call to OnPaint for efficiency.

  • La libreria di classi .NET Framework fornisce convertitori di tipi per tipi di dati comuni, ad esempio numeri interi, numeri decimali, valori booleani e altri.The .NET Framework class library provides type converters for common data types such as integers, decimal numbers, Boolean values, and others. Lo scopo di un convertitore di tipi è in genere quello di fornire la conversione da stringa a valore (da dati stringa in altri tipi di dati).The purpose of a type converter is generally to provide string-to-value conversion (from string data to other data types). I tipi di dati comuni sono associati a convertitori di tipi predefiniti che convertono i valori in stringhe e le stringhe in tipi di dati appropriati.Common data types are associated with default type converters that convert values into strings and strings into the appropriate data types. Se si definisce una proprietà che è un tipo di dati personalizzati (vale a dire non standard), è necessario applicare un attributo che specifica il convertitore di tipi da associare a tale proprietà.If you define a property that is a custom (that is, nonstandard) data type, you will have to apply an attribute that specifies the type converter to associate with that property. È inoltre possibile usare un attributo per associare un editor di tipi dell'interfaccia utente personalizzato a una proprietà.You can also use an attribute to associate a custom UI type editor with a property. Un editor di tipi dell'interfaccia utente fornisce un'interfaccia utente per la modifica di un tipo di dati o proprietà.A UI type editor provides a user interface for editing a property or data type. La selezione colori è un esempio di un editor di tipi dell'interfaccia utente.A color picker is an example of a UI type editor. Alla fine di questo argomento vengono forniti esempi di attributi.Examples of attributes are given at the end of this topic.

    Nota

    Se un convertitore di tipi o un editor di tipi dell'interfaccia utente non è disponibile per la proprietà personalizzata, è possibile implementarne uno come descritto in Estensione del supporto in fase di progettazione.If a type converter or a UI type editor is not available for your custom property, you can implement one as described in Extending Design-Time Support.

Il frammento di codice seguente definisce una proprietà personalizzata, chiamata EndColor, per il controllo personalizzato FlashTrackBar.The following code fragment defines a custom property named EndColor for the custom control FlashTrackBar.

Public Class FlashTrackBar  
   Inherits Control  
   ...  
   ' Private data member that backs the EndColor property.  
   Private _endColor As Color = Color.LimeGreen  
  
   ' The Category attribute tells the designer to display  
   ' it in the Flash grouping.   
   ' The Description attribute provides a description of  
   ' the property.   
   <Category("Flash"), _  
   Description("The ending color of the bar.")>  _  
   Public Property EndColor() As Color  
      ' The public property EndColor accesses _endColor.  
      Get  
         Return _endColor  
      End Get  
      Set  
         _endColor = value  
         If Not (baseBackground Is Nothing) And showGradient Then  
            baseBackground.Dispose()  
            baseBackground = Nothing  
         End If  
         ' The Invalidate method calls the OnPaint method, which redraws    
         ' the control.  
         Invalidate()  
      End Set  
   End Property  
   ...  
End Class  
public class FlashTrackBar : Control {  
   ...  
   // Private data member that backs the EndColor property.  
   private Color endColor = Color.LimeGreen;  
   // The Category attribute tells the designer to display  
   // it in the Flash grouping.   
   // The Description attribute provides a description of  
   // the property.   
   [  
   Category("Flash"),  
   Description("The ending color of the bar.")  
   ]  
   // The public property EndColor accesses endColor.  
   public Color EndColor {  
      get {  
         return endColor;  
      }  
      set {  
         endColor = value;  
         if (baseBackground != null && showGradient) {  
            baseBackground.Dispose();  
            baseBackground = null;  
         }  
         // The Invalidate method calls the OnPaint method, which redraws   
         // the control.  
         Invalidate();  
      }  
   }  
   ...  
}  

Nel frammento di codice seguente, un convertitore di tipi viene associato a un editor di tipi dell'interfaccia utente con la proprietà Value.The following code fragment associates a type converter and a UI type editor with the property Value. In questo caso Value è un numero intero e ha un convertitore di tipi predefinito, TypeConverterAttribute ma l'attributo applica un convertitore diFlashTrackBarValueConvertertipi personalizzato () che consente alla finestra di progettazione di visualizzarlo come percentuale.In this case Value is an integer and has a default type converter, but the TypeConverterAttribute attribute applies a custom type converter (FlashTrackBarValueConverter) that enables the designer to display it as a percentage. L'editor di tipi dell'interfaccia utente, FlashTrackBarValueEditor, consente di rappresentare visivamente la percentuale.The UI type editor, FlashTrackBarValueEditor, allows the percentage to be displayed visually. Questo esempio mostra inoltre che il convertitore di tipi o l'editor specificato TypeConverterAttribute dall' EditorAttribute attributo o esegue l'override del convertitore predefinito.This example also shows that the type converter or editor specified by the TypeConverterAttribute or EditorAttribute attribute overrides the default converter.

<Category("Flash"), _  
TypeConverter(GetType(FlashTrackBarValueConverter)), _  
Editor(GetType(FlashTrackBarValueEditor), _  
GetType(UITypeEditor)), _  
Description("The current value of the track bar.  You can enter an actual value or a percentage.")>  _  
Public ReadOnly Property Value() As Integer  
...  
End Property  
[  
Category("Flash"),   
TypeConverter(typeof(FlashTrackBarValueConverter)),  
Editor(typeof(FlashTrackBarValueEditor), typeof(UITypeEditor)),  
Description("The current value of the track bar.  You can enter an actual value or a percentage.")  
]  
public int Value {  
...  
}  

Vedere ancheSee also