Eventi per proprietà modificate

Se si desidera che il controllo invii notifiche quando viene modificata una proprietà denominata PropertyName, definire un evento denominato PropertyNameChanged e un metodo denominatoOn PropertyNameChanged che genera l'evento. La convenzione di denominazione in Windows Form consiste nell'aggiungere la parola Changed al nome della proprietà. Il tipo di delegato di evento associato per gli eventi modificati dalla proprietà è EventHandlere il tipo di dati dell'evento è EventArgs. La classe Control base definisce molti eventi modificati dalle proprietà, ad esempio BackColorChanged, BackgroundImageChangedFontChanged, LocationChanged, e altri. Per informazioni generali sugli eventi, vedere Eventi ed eventi nei controlli Windows Form.

Gli eventi modificati dalle proprietà sono utili perché consentono ai consumer di un controllo di associare gestori eventi che rispondono alla modifica. Se il controllo deve rispondere a un evento di modifica della proprietà generato, eseguire l'override del metodo PropertyNameChanged corrispondente Onanziché associare un delegato all'evento. Un controllo risponde in genere a un evento di modifica della proprietà aggiornando altre proprietà o ridisegnando parte o tutta la relativa superficie di disegno.

Nell'esempio seguente viene illustrato come il FlashTrackBar controllo personalizzato risponde ad alcuni degli eventi modificati dalla proprietà ereditati da Control. Per l'esempio completo, vedere Procedura: Creare un controllo Windows Form che mostra lo stato di avanzamento.

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

Vedi anche