Добавление свойства
Давайте добавим свойство к нашему прототипу элемента управления. Назовем его Title и сохраним его значение в закрытом свойстве m_Title. Выберите UserControll в окне Project и вставьте следующее объявление в окно Code:
Private m_Title As String
и следующие процедуры
Public Property Get Title () As String
Title = m_Title
End Property
Public Property Let Title(ByVal vNewValue As String)
m_Title = vNewValue
End Property
Закройте окна конструирования UserControl и Code, переключитесь на тестовую форму, выберите новый элемент управления и найдите новое свойство в окне Properties Наличие процедур Let и Get - это все, что необходимо Visual Basic для добавления свойства в элемент управления. Введите новое значение в поле свойства Title (например. Control Title). Как и ожидалось, заголовок не появился на элементе управления.
Чтобы отобразить заголовок, необходимо добавить несколько строк кода. Переключитесь обратно в окно UserControl, выполните на нем двойной щелчок, чтобы открыть окно Code, и в событии Paint введите процедуру.
Private Sub UserControl_Paint()
UserControl.CurrentX = 0
UserControl.CurrentY = 0
UserControl.Print m_Title
End Sub
Совет
Первые два оператора не нужны, если что-либо необходимо отобразить в верхнем левом углу элемента управления, но этим переменным необходимо присвоить соответствующие значения, если что-либо требуется отобразить в другом месте элемента управления.
Переключитесь обратно на тестовую форму. Если, следуя предыдущим указаниям в процессе экспериментов с формой, вы добавили какие-либо элементы управления, удалите их.
Добавьте экземпляр специального элемента управления (если имя объекта User-Control не было изменено, то он будет автоматически назван UserControll), и присвойте значение его свойству Title. Например, My Generic Control. Заголовок не появится в момент ввода, потому что событие Paint не вызывается, когда у свойства изменяется значение. Необходимо изменить размеры элемента управления, чтобы заставить событие Paint отобразить заголовок. Если вас не устраивает шрифт, измените свойство Font (наш элемент управления не имеет свойства Font).
Каждый раз для установки нового свойства вызывается процедура Property Let. Следовательно, для того чтобы заголовок отображался после ввода, необходимо вызывать метод Paint из процедуры Property Let. Переключитесь обратно в UserControl и добавьте следующую строку к процедуре Title Property Let.
UserControl_Paint
Окно VB должно иметь вид, как показано на рис. 16.14
Рис. 16.14. Окно VB во время первых шагов конструирования базового прототипа элемента управления
Теперь присвойте значение свойству Title и проследите, чтобы строка появилась на элементе управления. Затем нажмите клавишу F5, чтобы запустить приложение на выполнение. Заголовок не появится на элементе управления. Он был там во время конструирования, но исчез во время выполнения. Можно остановить приложение и поискать значение свойства Title, чтобы удостовериться, что оно все еще содержит установленное значение. Но здесь нас подстерегает неожиданность. Оказывается, что значением свойства Title является пустая строка. Это не является следствием допущенной ошибки. Любой набор свойств режима конструирования теряет свои значения во время выполнения. Это странно, но так работают элементы управления.
Опыт работы с Visual Basic свидетельствует, что любые свойства, установленные в режиме конструирования, сохраняют свои значения во время выполнения. Чтобы это произошло, необходимо сначала сохранить значения свойств в PropertyBag, до чего не так-то просто додуматься. Давайте исследуем цикл жизни элемента управления.