在 Windows 窗体控件中定义属性
有关属性的概述,请参阅属性概述。 定义属性时需考虑以下重要注意事项:
必须将特性应用于定义的属性。 特性指定设计器应如何显示属性。 有关详细信息,请参阅组件的设计时特性。
如果更改属性会影响控件的视觉显示,请从
set
访问器调用 Invalidate 方法,此方法是从 Control 继承的。 Invalidate 又会调用 OnPaint 方法,以重绘控件。 对 Invalidate 的多次调用会生成对 OnPaint 的一次调用,以提高效率。.NET Framework 类库为常见数据类型(如整数、小数、布尔值和其他数据类型)提供了类型转换器。 类型转换器的用途通常是提供字符串到数值的转换(从字符串数据转换为其他数据类型)。 常见数据类型与默认类型转换器相关联,默认类型转换器可将数值转换为字符串,并将字符串转换为相应数据类型。 如果定义了自定义(即非标准)数据类型的属性,则应用的特性必须将类型转换器指定为与该属性相关联。 还可使用特性将自定义 UI 类型编辑器与某个属性相关联。 UI 类型编辑器提供一个用于编辑属性或数据类型的用户界面。 UI 类型编辑器的一个例子是颜色选取器。 本主题末尾给出了特性的示例。
注意
如果没有类型转换器或 UI 类型编辑器可供自定义属性使用,则可根据扩展设计时支持中所述来实现一个。
以下代码片段为自定义控件 FlashTrackBar
定义了一个名为 EndColor
的自定义属性。
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();
}
}
...
}
以下代码片段将类型转换器和 UI 类型编辑器与属性 Value
相关联。 在这种情况下,Value
是一个整数,且具有默认的类型转换器,但 TypeConverterAttribute 特性应用一个自定义类型转换器 (FlashTrackBarValueConverter
),该类型转换器允许设计器按百分比形式显示特性。 UI 类型编辑器 FlashTrackBarValueEditor
允许以可视化方式显示百分比。 此示例还演示由 TypeConverterAttribute 或 EditorAttribute 特性指定的类型转换器或编辑器如何重写默认转换器。
<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 {
...
}