Definování vlastnosti v ovládacích prvcích Windows Forms
Přehled vlastností najdete v tématu Přehled vlastností. Při definování vlastnosti je potřeba vzít v úvahu několik důležitých aspektů:
Na vlastnosti, které definujete, musíte použít atributy. Atributy určují, jak má návrhář zobrazit vlastnost. Podrobnosti najdete v tématu Design-Time Atributy komponent.
Pokud změna vlastnosti ovlivňuje vizuální zobrazení ovládacího prvku, zavolejte metodu Invalidate (kterou ovládací prvek dědí z Control) z
set
přístupového objektu. Invalidate zase volá metodu OnPaint, která překreslí ovládací prvek. Více volání Invalidate vede k jednomu volání OnPaint pro zajištění efektivity.Knihovna tříd rozhraní .NET Framework poskytuje převaděče typů pro běžné datové typy, jako jsou celá čísla, desetinná čísla, logické hodnoty a další. Účelem převaděče typů je obecně poskytnout převod typu na hodnotu (z řetězcových dat na jiné datové typy). Běžné datové typy jsou přidruženy k výchozím převaděčům typů, které převádějí hodnoty na řetězce a řetězce na příslušné datové typy. Pokud definujete vlastnost, která je nestandardním (tj. vlastním) datovým typem, budete muset použít atribut, který určuje převaděč typů pro přidružení k této vlastnosti. Pomocí atributu můžete také přidružit vlastní editor typů uživatelského rozhraní k vlastnosti. Editor typů uživatelského rozhraní poskytuje uživatelské rozhraní pro úpravy vlastnosti nebo datového typu. Výběr barvy je příkladem editoru typů uživatelského rozhraní. Příklady atributů jsou uvedeny na konci tohoto tématu.
Poznámka
Pokud pro vlastní vlastnost není k dispozici převaděč typů nebo editor typů uživatelského rozhraní, můžete některý implementovat, jak je popsáno v tématu Rozšíření podpory Design-Time.
Následující fragment kódu definuje vlastní vlastnost s názvem EndColor
pro vlastní ovládací prvek 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();
}
}
...
}
Následující fragment kódu přidruží převaděč typů a editor typů uživatelského rozhraní k vlastnosti Value
. V tomto případě Value
je celé číslo a má výchozí převaděč typů, ale atribut TypeConverterAttribute použije převaděč vlastního typu (FlashTrackBarValueConverter
), který návrháři umožňuje zobrazit ho jako procento. Editor typů uživatelského rozhraní FlashTrackBarValueEditor
umožňuje vizuálně zobrazovat procento. Tento příklad také ukazuje, že převaděč typů nebo editor určený atributem TypeConverterAttribute nebo EditorAttribute přepíše výchozí typový převaděč.
<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 {
...
}
Viz také
.NET Desktop feedback