Программа 16.19. Модифицированные процедуры свойства Mandatory
Public Property Get Mandatory() As ReqOpt
Mandatory = m_Mandatory
End Property
Public Property Let Mandatory(ByVal New_Mandatory As ReqOpt)
m_Mandatory = New Mandatory
If m Mandatory = Required Then
Text1.Backcolor = m_MandatoryColor
Else
Text1.Backcolor = m_def_LeaveFocusColor
End If
PropertyChanged "Mandatory"
End Property
Когда свойство Mandatory установлено в True, элемент управления автоматически устанавливает свойство цвета фона равным значению свойства MandatoryValue.
Тем самым обеспечивается тривиальный код, необходимый для правильного функционирования элемента управления. Теперь можно добавить специальный код, чтобы расширить возможности элемента управления
TextBox. Код, расширяющий возможности элемента управления TextBox, расположен в событии LostFocus объекта UserControl. Когда пользователь убирает фокус с элемента управления CTextBox, код проверяет содержимое элемента управления и свойство Mandatory. Если элемент управления пуст и свойство Mandatory равно True, то цвет фона элемента управления TextBox устанавливается равным значению свойства MandatoryColor.
Программа 16.20. Обработчик события LostFocus объекта UserControl
Private Sub Textl_LostFocus ()
If Len(Trim(Textl.Text)) = 0 And m_Mandatory = Required Then
Text1.BackColor = m_MandatoryColor
Else
Text1.BackColor = LeaveFocusColor
End If
End Sub
Примечание
Обратите внимание, что код не инициирует событие
LostFocus. Хотя поведение элемента управления, когда он теряет фокус, определяется кодом, все же можно еще написать обработчик события LostFocus. Можно
использовать событие LostFocus, потому что это событие не может быть вызвано непосредственно самим элементом управления. Оно вызывается контейнером элемента управления (т.е. формой), и нельзя инициировать это событие из кода элемента управления. Таким образом, если даже в коде элемента управления отсутствует оператор RaiseEvent LostFocus (), обработчик события LostFocus все же можно запрограммировать. То же верно и для события GotFocus, которое также вызывается контейнером, а не элементом управления.