Property-Changed 事件

如果希望控件在名为 PropertyName 的属性发生更改时发送通知,请定义一个名为 PropertyNameChanged 的事件,以及一个名为 OnPropertyNameChanged 的方法来引发该事件。 Windows 窗体中的命名约定是将词组 Changed 追加到属性的名称。 与属性更改事件关联的事件委托类型是 EventHandler,事件数据类型是 EventArgs。 基类 Control 定义许多属性更改的事件,例如 BackColorChangedBackgroundImageChangedFontChangedLocationChanged等。 有关事件的背景信息,请参阅 Windows 窗体控件中的 事件事件。

属性更改事件很有用,因为它们允许控件的使用者附加响应更改的事件处理程序。 如果控件需要响应引发的属性更改事件,请替代相应的 OnPropertyNameChanged 方法,而不是将委托附加到事件。 控件通常通过更新其他属性或重新绘制部分或全部绘图图面来响应属性更改的事件。

以下示例演示 FlashTrackBar 自定义控件如何响应它从 Control继承的某些属性更改事件。 有关完整示例,请参阅 如何创建一个显示进度的 Windows 窗体控件

protected override void OnTextChanged(EventArgs e) {
    base.OnTextChanged(e);
    Invalidate();
}

protected override void OnBackColorChanged(EventArgs e) {
    base.OnBackColorChanged(e);
    if ((baseBackground != null) && (!showGradient)) {
                baseBackground.Dispose();
                baseBackground = null;
    }
}
Protected Overrides Sub OnTextChanged(ByVal E As EventArgs)
    MyBase.OnTextChanged(E)
    Invalidate()
End Sub

Protected Overrides Sub OnBackColorChanged(ByVal E As EventArgs)
    MyBase.OnBackColorChanged(E)
    If (baseBackground IsNot Nothing) And Not ShowGradient Then
        baseBackground.Dispose()
        baseBackground = Nothing
    End If
End Sub

另请参阅