События изменения свойств

Если вы хотите, чтобы элемент управления отправлял уведомления при изменении свойства с именем PropertyName, определите событие с именем PropertyNameChanged и метод с именем OnPropertyNameChanged, который вызывает событие. Соглашение об именовании в Windows Forms заключается в добавлении слова Changed (Изменено) к имени свойства. Связанный тип делегата события для событий изменения свойств — EventHandler, а тип данных события EventArgs. Базовый класс Control определяет множество событий изменения свойств, таких как BackColorChanged, BackgroundImageChanged, FontChanged, LocationChanged и другие. Дополнительные сведения о событиях см. в статьях События и События в элементах управления Windows Forms.

События изменения свойств полезны, так как они позволяют потребителям элемента управления присоединять обработчики событий, реагирующие на изменения. Если элемент управления должен отвечать на вызываемое им событие изменения свойства, переопределите соответствующий метод OnPropertyNameChanged вместо подключения делегата к событию. Элемент управления обычно реагирует на событие изменения свойства путем обновления других свойств или перерисовки некоторых или всех его поверхностей конструктора.

В следующем примере показано, как пользовательский элемент управления FlashTrackBar реагирует на некоторые события изменения свойств, от которые он наследует Control. Полный пример см. в статье Практическое руководство. Создание элемента управления, показывающего прогресс в форме Windows Forms.

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

См. также