Определяет имя класса члена, используемое при вводе новых членов в контейнер. Редактируемое как в design time, так и в run time.

Для родительского контейнера Column и его членов - заголовков используйте вместо свойства MemberClass свойство HeaderClass .

ЗамечаниеЗамечание

Если класс члена основан на классе, чье определение хранится в программном файле (.prg), убедитесь, что скомпилированный программный файл (.fxp) синхронизирован с программным файлом .prg, то есть, скомпилированный файл содержит самые последние изменения, сделанные в программном файле.

Object.MemberClass [ = cClassName ]

Expand imageВозвращаемое значение

cClassName

Определяет имя класса члена в программном файле (.prg) или в файле библиотеки визуальных классов (.vcx).

Expand imageПримечания

Применяется к элементам управления: PageFrame | CommandGroup | OptionGroup | Grid

Visual FoxPro создает члена, используя значение, содержащееся в свойстве MemberClass при следующих условиях:

  • MemberClass указан для класса контейнера во время разработки, то есть в design time. Когда Visual FoxPro создает контейнер, он создает экземпляры членов, используя свойство MemberClass.

  • Счетные свойства объекта члена Count, такие как PageCount, ButtonCount или ColumnCount могут быть увеличены при исполнении приложения, то есть в run time. Если счетное свойство объекта Count увеличено либо программно, либо интерактивно, Visual FoxPro добавляет новые экземпляры, используя значение, занесенное в свойство MemberClass.

    ЗамечаниеЗамечание

    Свойство ColumnCount в этом смысле уникальное, то есть вы можете указать в качестве его значения либо минус единицу (-1), либо ноль (0). Все прочие счетные свойства Count должны быть больше или равны нулю.

Оба свойства, и MemberClass и MemberClassLibrary поддерживают методы Access и Assign и также все возможные области видимости - Public, Hidden и Protected.

Контейнер может хранить объекты различных классов члена, имеющего один и тот же базовый класс. Например, предположим, что у вас имется объект PageFrame и два класса членов, myPage1 и myPage2, определенных на основе класса Page. Вы можете указать класс myPage1 для свойства MemberClass объекта PageFrame во время разработки, а затем, во время исполнения приложения, то есть в run time, изменить значение свойства MemberClass, указав для него класс myPage2, с одновременным увеличением свойства PageCount объекта PageFrame.

Свойства MemberClass и MemberClassLibrary имеют приведенные ниже дополнительные поведения в design time и run time:

  • Поведение в design time

    При установке свойств MemberClass и MemberClassLibrary в design time, вы будете запрошены об уничтожении существующих классов членов, включания установки свойств; нового, введенного или модифицированного кода метод; и введенных объектов.

    При создании субкласса из контейнера, для которого установлено свойство MemberClass, субкласс должным образом наследует свойства MemberClass и MemberClassLibrary, которые вы можете изменить.

    Visual FoxPro отображает свойства MemberClass и MemberClassLibrary в окне Properties как свойства с признаком "только для чтения". Однако вы можете установаить эти свойства в окне Properties щелчком по кнопке выбора (...) для отображения диалогового окна Open для просмотра и выбора требуемого вам класса члена и его библиотеки.

    ЗамечаниеЗамечание

    Если вы желаете указать класс члена для контейнера, вы должны установить оба свойства MemberClass и MemberClassLibrary, а не только имя его класса.

    Если вы устанавливаете счетное свойство объекта члена Count в программном файле (.prg) во время разработки, в design time, вы должны установить это свойство после установки свойств MemberClass и MemberClassLibrary, вследствие присутсвия определенных зависимостей. Например:

      CopyCode imageСкопировать код
    DEFINE CLASS myPageFrame AS PageFrame
       MemberClassLibrary = 'MyPages.prg'
       MemberClass = 'myPage'
       PageCount = 3
    ENDDEFINE

    При использовании функции ASELOBJ() для индивидуальной установки свойств MemberClass и MemberClassLibrary, проявляется приведенное ниже поведение:

    • Если вы с помощью функции ASELOBJ() указали только одно из свойств - MemberClass или MemberClassLibrary, Visual FoxPro не будет генерировать ошибку, но сбросить установку свойств и будет использовать базовый класс при вводе нового объекта члена.

    • Если счетное свойство объекта члена Count установлено в 0 (или -1 для объектов контейнера Grid), Visual FoxPro не производит ошибки при установки свойств MemberClass и MemberClassLibrary, которые в этом случае вы можете установить в любом порядке.

    • Если счетное свойство объекта члена Count установлено в значение, большее чем 0, Visual FoxPro производит проверку на ошибки при установке свойства MemberClass. Поэтому, в такой ситуации вам необходимо установить значение для свойства MemberClassLibrary прежде, чем вы установите значение для свойства MemberClass.

      ЗамечаниеЗамечание

      Если оба свойства содержат недействительные значения, Visual FoxPro сгенерирует подходящие для такого случая сообщения и установит счетное свойство объекта члена Count обратно в 0.

      Если оба свойства, и MemberClass, и MemberClassLibrary, содержат действительные значения, Visual FoxPro пересоздаст все существующие классы членов на основе нового класса члена и все данные предыдущих объектов членов будут потеряны.

      Caution noteПредупреждение

      Visual FoxPro не предупредит вас об уничтожении существующих классов членов, включая установки их свойств; новых, введенных или измененных кодов метода; введенных объектов, при изменении свойств MemberClass и MemberClassLibrary в коде программы.

      Также, как и при установке счетного свойства объекта члена Count в програмнном файле (.prg) в design time, вы должны установить его значение только после установки свойств MemberClass и MemberClassLibrary.

      Вы можете установить для свойства MemberClassLibrary другую библиотеку классов, которая имеет такой же класс, что и указанный в свойстве MemberClass. Если после этого вы увеличите значение счетного свойства Count объекта члена, Visual FoxPro введет новый класс члена используя значение, установленное в свойстве MemberClassLibrary. Хотя дизайнер отображает классы члена из разных библиотек классов, но при сохранении класса в качестве значения свойства MemberClassLibrary останется только самая последняя выбранная библиотека. Поэтому, когда вы создаете экземпляр класса или открываете заново класс для редактирования, все объекты члены создаются на основе класса библиотеки, указанной в свойстве MemberClassLibrary.

  • Поведние в run time

    Изменение свойств MemberClass и MemberClassLibrary воздействует только на вновь создаваемые объекты членов, но не на уже существующие в контейнеры объекты. Вы, кроме того, можете использовать методы AddObject и NewObject, которые, как обычно, могут определять различные классы.

    ЗамечаниеЗамечание

    Во время исполнения приложения вы должны указать оба свойства - MemberClass и MemberClassLibrary. Если вы в run time установите только одно из них - MemberClass или MemberClassLibrary, Visual FoxPro не будет генерировать ошибку; однако он будет будет использовать в такой ситуации базовый класс и сбросит установленное вами значение свойства.

    Для достоверного определения класса члена, используемого для создания экземпляра конкретного объета члена, используйте свойства Class и ClassLibrary объекта члена вместо свойств MemberClass и MemberClassLibrary так как последние свойства могут быть изменены в run time.

    ЗамечаниеЗамечание

    Контейнер может иметь объекты членов, производных из различных классов членов.

    Visual FoxPro не поддерживает возможности указания класса в библиотеке класса за пределами скомпилированного приложения Visual FoxPro (.app).

Expand imageПример

Приведенный ниже пример создает форму, добавляет в нее контейнер PageFrame, определяет его, как "myPageFrame", установливает свойства MemberClassLibrary и MemberClass для "myPageFrame", определяет объект члена Page, как "myPage", вводит код для командной кнопки и событий.

  CopyCode imageСкопировать код
PUBLIC x
x = CREATEOBJECT("form")
x.ADDOBJECT("pf1","myPageFrame")
x.pf1.Visible = .T.
x.Show()

DEFINE CLASS myPageFrame AS PageFrame
   MemberClassLibrary = 'myPages.PRG'
   MemberClass = 'myPage'
   PageCount = 2
   TabOrientation = 1
ENDDEFINE

DEFINE CLASS myPage AS Page
   ADD OBJECT cmd1 AS commandbutton WITH ;
      Caption = "Hello", FontBold = .T.
   PROCEDURE Init
      THIS.Caption = "Funpage"+TRANSFORM(THIS.Parent.PageCount)
   ENDPROC
   PROCEDURE cmd1.Click
      MESSAGEBOX(this.Caption)
      THIS.Parent.Parent.PageCount = THIS.Parent.Parent.PageCount+1
   ENDPROC
ENDDEFINE

Expand imageСмотрите также