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 On
anziché 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
.NET Desktop feedback