Zdarzenia zmiany właściwości

Jeśli chcesz, aby kontrolka wysyłała powiadomienia, gdy zmienia się właściwość o nazwie PropertyName, zdefiniuj zdarzenie o nazwie PropertyNameChanged i metodę o nazwie OnPropertyNameChanged, która zgłasza zdarzenie. Konwencja nazewnictwa w formularzach Windows Forms polega na dołączeniu wyrazu Zmieniono na nazwę właściwości. Skojarzony typ delegata zdarzenia dla zdarzeń zmienionych właściwości to EventHandler, a typ danych zdarzenia to EventArgs. Klasa Control podstawowa definiuje wiele zdarzeń zmienionych właściwości, takich jak BackColorChanged, , BackgroundImageChangedFontChanged, LocationChangedi innych. Aby uzyskać podstawowe informacje o zdarzeniach, zobacz Zdarzenia i zdarzenia w kontrolkach formularzy systemu Windows.

Zdarzenia zmienione właściwości są przydatne, ponieważ umożliwiają użytkownikom kontrolki dołączanie programów obsługi zdarzeń, które reagują na zmianę. Jeśli kontrolka musi odpowiadać na zdarzenie zmienione właściwości, które zgłasza, przesłoń odpowiednią Onmetodę PropertyNameChanged zamiast dołączać delegata do zdarzenia. Kontrolka zazwyczaj reaguje na zdarzenie zmienione właściwości przez zaktualizowanie innych właściwości lub ponowne rysowanie części lub całej powierzchni rysunku.

W poniższym przykładzie pokazano, jak kontrolka FlashTrackBar niestandardowa reaguje na niektóre zdarzenia zmienione przez właściwość dziedziczone z Controlklasy . Aby zapoznać się z kompletnym przykładem, zobacz Instrukcje: tworzenie kontrolki formularzy systemu Windows, która pokazuje postęp.

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

Zobacz też