Создание первого ActiveX элемента.

Домой Наверх Предыдущий Следующий

Добавление свойств для ActiveX-элементов

В этом разделе мы добавим парочку свойств для нашей звезды - а именно свойства n и m (напомним, что n - это сколько вершин у нашей звезды и m - это через сколько вершин они будут соединятся). При этом свойства эти будут типа Read-Write, т. е. их на этапе работы программы можно будет и читать, и изменять. Кроме того мы обсудим, как добиться, чтобы свойства эти были доступны на этапе разработки в окне свойств.

Для начала произведём несколько подготовительных действий.

Сделайте видимым окно кода для нашего ActiveX-элемента Star (например таким способом: в окне Project Explorer'а вызовите контекстное меню для нашего ActiveX-элемента (т. е. сделайте щелчёк правой кнопкой мыши на строке Star (Star.ctl)), и выберете в нём пункт View Code. Появится окно кода для нашего элемента ActiveX). Обратите внимание ещё раз - код надо будет ввести для нашего ActiveX-элемента, а не для формы Form1!

Далее напечатайте сразу под строчкой Option Explicit следующую пару строк:

Dim m_intN As Integer 'число вершин

Dim m_intM As Integer 'число пропусков

Прокомментируем их. Судя по названиям этих переменных (m_intN и m_intN), они имеют отношение к n и m для нашей звезды. Действительно, так оно и есть. Только эти две переменные - это внутренние переменные для нашего ActiveX-элемента. Снаружи они видны не будут, и никто (кроме Вас, как разработчика, конечно) о них не будет подозревать. Снаружи же программист, использующий Ваш ActiveX-элемент, увидит более понятные и привычные названия n и m . Зачем заводить отдельные невидимые снаружи переменные, спросите Вы. В этом заключается один из принципов Объектно-ориентированного программирования - как правило все свойства (а в данном случае n и m - это некоторые свойства) объявляются закрытыми, т. е. к ним невозможно получить доступа напрямую. Доступ возможен только через специальные функции, которые, в частности, не позволят записать во внутренние переменные что-нибудь недопустимое. Обратите также внимание на имена этих переменных. Существует общепринятая практика строить имя внутренней переменной по следующему правилу:

"m_" + префикс_типа_переменной + внешнее_имя, где m_ - это префикс, показывающий что данная переменная - это внутренняя переменная нашего объекта (в нашем случае ActiveX-элемента), префикс_типа_переменной - указывает на тип переменной (целый в нашем случае), внешнее_имя - имя, под которым наша переменная будет видна снаружи (например в окне свойств среды Visual Basic'а).

Также обратите Ваше внимание на то, что мы вводим переменные с помощью оператора Dim, а не, скажем, с помощью оператора Public. Именно так мы сделали потому, что эти переменные - это переменные внутри нашего ActiveX-элемента, и мы не хотим, чтобы они были видны снаружи. К нашим переменным m_intN и m_intM пока извне ActiveX-элемента доступа нет (в частности мы не увидим эти свойства в окне свойств). Добавим следующий код для доступа к m_intN:

Public Property Get n() As Integer

n = m_intN

End Property

Public Property Let n(New_N As Integer)

m_intN = New_N

End Property

Прокомментируем наш код. Для того, чтобы к внутреннюю переменную можно было читать и изменять, нам надо добавить пару функций: Property Get и Property Let . Обе функции должны быть Public. Как понятно из названия, Property Get служит для чтения свойства, а Property Let - для записи. После названия каждой из этих функции мы должны указать внешнее имя для нашего свойства (в нашем случае n и m), т. е. имя, которое появится в окне свойств для нашего элемента ActiveX.

Синтаксис здесь абсолютно стандартный, и очень похож на синтаксис для функций - сначала пишем слово, показывающее тип доступа (Public в нашем случае), затем - ключевое слово Property Get или Property Let (аналогом его для функций является слово Function), затем - имя (n или m в нашем случае), для которого в круглых скобках указываем при необходимости аргументы (New_N As Integer у нас), после которого тип возвращаемого значения, если он необходим (понятно, что это надо делать только для Property Get), и, наконец, операторы нашего свойства, после которых ставим End Property. Предназначение Property Get состоит в передаче внутреннего свойства наружу, в качестве возвращаемого значения (строка n = m_intN в нашем примере). Property Let же, напротив, предназначен для записи значения во внутреннее свойство (строка m_intN = New_N в нашем примере).

Добавим теперь абсолютно аналогичный код для второго свойства - m_intM:

Public Property Get m() As Integer

m = m_intM

End Property

Public Property Let m(New_M As Integer)

m_intM = New_M

End Property

Рассмотрим теперь наши изменения в действии. Активизируем нашу тестовую форму Form1, выделяем на ней наш элемент Star1 и смотрим в окно свойств (если на форме Form1 наш элемент Star1 заштрихован (рис. 9), то это означает, что в данный момент с ним работать нельзя. Для борьбы с этим просто закройте форму нашего ActiveX-элемента, нажав на крестик в её углу. Только не перепутайте - закрыть надо форму, в заголовке которой написано "MyStar - Star (UserControl)", а не форму Form1). После этого штриховка на Star1 должна пропасть).

Если никаких новых свойств n и m в окне свойств пока не видно, то просто откройте форму "MyStar - Star (UserControl)" ещё раз и опять её закройте. Дело в том, что на нашей форме Form1 находится ещё старый, не обновленный экземпляр нашего ActiveX-элемента. В старом экземпляре у нас свойства n и m ещё не были видны снаружи (или, как ещё говорят, опубликованы). Для того, чтобы они всё же появились, и надо открыть и вновь закрыть форму ActiveX-элемента.

Теперь в нашем окне свойств должны появиться два новых свойства n и m (рис. 10), которым Вы можете давать новые значения. При этом, правда, ничего на нашей форме не меняется.

Обратите внимание на одну маленькую особенность. Если Вы зададите в окне свойств новые значения для n и m (скажем 5 и 3 для звезды), запустите нашу программу (нажав F5), закроете её и посмотрите на n и m, то в них будут не те новые значения, которые Вы им только что задали, а опять первоначальные нули. Эту особенность и как с ней бороться мы обсудим позже.

Замечание

Иногда нам надо задать некоторое свойство только для чтения (например это может быть строка с указанием Ваших авторских прав). В этом случае Вы должны для соответствующей внутренней переменой Вашего ActiveX-элемента задать только Property Get.

Аналогично, если Вам надо свойство только для записи, то используйте только Property Set.

Далее

© Ушку ду Кашку

hidden/visible

Hosted by uCoz