Вы можете создавать массивы, содержащие объекты, а также массивы, являющиеся членами класса.
Массивы
объектов
Вы можете создать массив, который содержит объекты. При создании массива, содержащего объекты, имейте ввиду следующие соображения:
-
Вы не можете присвоить индивидуальный объект все элементам в массиве использованием одной команды. Вы должны присвоить объект каждому элементу массива индивидуально.
-
Вы не можете присвоить значение свойства целому массиву.
Например, приведенная ниже команда приведет к ошибке:
Скопировать код
MyArray.Enabled = .F.
-
Когда вы изменяете размер массива с целью увеличения его размера, то новые элементы массива инициализируются в значения (.F.), как и со всеми массивами в Visual FoxPro. Когда вы изменяете размер массива с целью уменьшения его размера, объекты с индексом большим, чем новый максимальный индекс, высвобождаются.
Например, приведенный ниже код создает массив с именем MyArray
,
который хранит объекты командных кнопок, используя структуру цикда:
![]() | |
---|---|
DIMENSION MyArray[5] FOR x = 1 TO 5 MyArray[x] = CREATEOBJECT("CommandButton") ENDFOR |
Массив,
в качестве
члена класса
Вы можете включить массивы в качестве членов класса, для хранения в них объектов.
Приведенный ниже пример создает форму, которая содержит объект, созданный из
пользовательского класса на базе класса Container, ButtonList. Класс ButtonList
содержит члена, который представляет собой массив с именем aChoices
,
в котором каждый элемент содержит объекты разных элементов управления.
Когда вы запустите пример из файла программы (.prg), то появится форма с
двумя командными кнопками и чек-боксом. Когда пользователь щелкнет по командной
кнопке или установит метку в чек-боксе формы, Visual FoxPro перешлет номер
элемента массива, который содержит объект элемента управления событию
Click посредством параметра tnIndex
. Команда структуры DO CASE
отобразит окно с номер элемента.
Различие в коде зависит от того, какая кнопка была нажата.
![]() | |
---|---|
loForm = CREATEOBJECT("Form") loForm.AddObject("cntButtons", "ButtonList") loForm.cntButtons.SetAll("Visible", .T.) loForm.cntButtons.Visible = .T. loForm.Show(1) DEFINE CLASS ButtonList AS Container Height = 100 Width = 130 BorderWidth = 0 DIMENSION aChoices[3] ADD OBJECT aChoices[1] AS CommandButton WITH ; Top = 10, ; Height = 20, ; Left = 10, ; Caption = "Element One" ADD OBJECT aChoices[2] AS CommandButton WITH ; Top = 40, ; Left = 10, ; Height = 20, ; Caption = "Element Two" ADD OBJECT aChoices[3] AS CheckBox WITH ; Top = 70, ; Left = 10, ; Caption = "Element Three" PROCEDURE aChoices.Click LPARAMETER tnIndex DO CASE CASE tnIndex = 1 WAIT WINDOW "1" CASE tnIndex = 2 WAIT WINDOW "2" CASE tnIndex = 3 WAIT WINDOW "3" ENDCASE ENDPROC ENDDEFINE |
Смотрите
также
Справочное руководство
МассивыДобавление объектов в класс контейнера
Концепции
Объекты в Visual FoxProПрочие ресурсы
Работа с объектами в Visual FoxPro
© Microsoft Corporation. All rights reserved.
Перевод выполнен JS.