Для сохранения свойств элемента между этапами разработки и запуска программы добавьте следующий код (как всегда в проект MyStar Project1.vbp):
Public Sub UserControl_WriteProperties(PropBag As PropertyBag)
PropBag.WriteProperty "N", m_intN, 3
PropBag.WriteProperty "M", m_intM, 1
End Sub
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
m_intN = PropBag.ReadProperty("N", 3)
m_intM = PropBag.ReadProperty("M", 1)
DrawStar m_intN, m_intM
End Sub
Как всегда, обсудим его. У объекта UserControl (как Вы помните, это тот самый объект, на котором мы рисуем наш ActiveX-элемент) есть два специальных метода: WriteProperties и ReadProperties. Как ясно из их названия, они предназначены для записи и для чтения свойств. Спрашивается, куда и откуда? Ответ содержится в параметрах этим методов, а именно в методе WriteProperties свойства записываются в переменную PropBag типа PropertyBag , а в методе ReadProperties - свойства читаются из этого самого PropBag. Почему же их в этот самый PropBag надо записывать и потом читать? Зачем все эти сложности? Для ответа вспомним, что происходит с нашим ActiveX-элементом, сколько раз и когда он рождается и умирает.
Действия программиста | Что происходит с экземпляром ActiveX-элемента |
Размещение ActiveX-элемента на форме (путём двойного щелчка на панели элементов). | 1.Вызывается метод Initialize. 2.Вызывается метод InitProperties (в нем, как правило, устанавливаются стандартные начальные значения для ActiveX-элемента). 3.Создаётся экземпляр ActiveX-элемента времени разработки. |
Установка программистом своих значений свойств для ActiveX-элемента | Для созданного на предыдущем шаге экземпляра ActiveX-элемента изменяются свойства. |
Запуск программы в среде Visual Basic'а. | 1.Вызывается метод WriteProperties, который запишет новые свойства ActiveX-элемента, заданные программистом на предыдущем этапе, в объект PropBag типа PropertyBag. 2.Старый экземпляр ActiveX-элемента (тот, который был создан на этапе разработки нашим программистом) умирает. |
Запущенная программа появляется на экране. | 1.Создается новый экземпляр ActiveX-элемента. 2.Вызывается метод Initialize для нового экземпляра ActiveX'а. 3.Новый экземпляр ActiveX-элемента берёт свои свойства из объекта PropBag типа PropertyBag (таким образом этот новый экземпляр получает именно те значения свойств, которые были заданы программистом) путем вызова метода ReadProperties. |
При работе программы возможно изменение свойств нашего ActiveX-элемента в результате действий пользователя или самой программы. | Свойства ActiveX-элемента изменяются на какие-то другие. |
Закрытие программы. | Экземпляр, созданный на этапе запуска программы, уничтожается. Новые значения свойств никуда не сохраняются . |
Возврат к этапу разработки программы. | 1.Вызывается метод Initialize для нового экземпляра ActiveX'а. 2.Путем вызова метода ReadProperties новый экземпляр ActiveX-элемента берёт свои свойства из объекта PropBag типа PropertyBag (таким образом этот новый экземпляр получает именно те значения свойств, которые были заданы на этапе разработки программистом). |