VB.NET. Создание компонентов Урок 10. Реагируем на изменение шрифта контейнера
Хорошо написаные компоненты реагируют на изменение различных характеристих контейнера, на котором они расположены. Например, если вы разместите на форме метку (label) и для самой формы будете менять ее шрифт, наприер, так:
this.Font = new Font( "Arial", 12);
то шрифт на нашем label'е тоже поменяется соответствующим образом.
Давайте сделаем, чтобы наш компонент работал таким же образом - т. е. чтобы он менял свой шрифт, если последний будет изменен у формы.
Создайте проект для нового компонента (см. урок 1). Расположите на нем некоторый label. Именно он и будет менять свой шрифт. И, что самое важное, добавьте следующий код в класс нашего компонента:
...
' Обрабитка изменения шрифта контейнером.
Protected Overrides Sub OnParentFontChanged(ByVal e As System.EventArgs)
' Перерисовываем при изменении
' шрифта контенера.
Invalidate()
End Sub
' Перерисовка.
Protected Overrides Sub OnPaint _
(ByVal e As System.Windows.Forms.PaintEventArgs)
' Устанавливаем наш шрифт
' как в контейнере.
Font = Parent.Font
End Sub
...
Логика тут такая - при изменении шрифта контейнером мы вызываем для компонента перерисовку (путем вызова метода Invalidate()) и затем в перерисовке (т. е. в методе OnPaint) мы задаем новый шрифт.
Можно компилировать и запускать тестовую программу (на которою, например, модно добавть к кнопку с приведенном в начале урока строкой по изменению шрифта). Теперь наш компонент будет изменять свой шрифт вслед за контейнером:
Обратите внимание, что такое поведение будет иметь место и на этапе разработки тестового проекта.
|