Eventos de cambio de propiedades

Si desea que el control envíe notificaciones cuando una propiedad denominada PropertyName cambie, defina un evento denominado PropertyNameChanged y un método denominado OnPropertyNameChanged que genere el evento. La convención de nomenclatura de Windows Forms es anexar la palabra Changed al nombre de la propiedad. El tipo de delegado de evento asociado de los eventos de cambio de propiedad es EventHandler, y el tipo de datos del evento es EventArgs. La clase base Control define muchos eventos de cambio de propiedad, como BackColorChanged, BackgroundImageChanged, FontChanged, LocationChanged, etc. Para obtener información general sobre los eventos, vea Eventos y Eventos en controles de Windows Forms.

Los eventos de cambio de propiedad son útiles porque permiten a los consumidores de un control asociar controladores de eventos que responden al cambio. Si un control necesita responder a un evento de cambio de propiedad generado, invalide el método OnPropertyNameChanged correspondiente en lugar de asociar un delegado al evento. Normalmente, un control responde a un evento de cambio de propiedad actualizando otras propiedades o volviendo a dibujar alguna o todas sus superficies de dibujo.

En el ejemplo siguiente se muestra el modo en que el control personalizado FlashTrackBar responde a algunos de los eventos de cambio de propiedad que hereda de Control. Para obtener el ejemplo completo, vea Procedimiento para crear un control de Windows Forms que muestre el progreso.

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

Vea también