Использование вложенных объектов
В Visual FoxPro имеются базовые классы, предназначенные для создания вложенных объектов, например класс Grid (Таблица). При ссылке на вложенный объект необходимо перечислить все объекты, в которые он входит, разделяя элементы списка точками. Например, ссылка на столбец coicusto-merid объекта Customer типа Grid (Таблица) определяется следующим образом:
Customer.colCustomerld
Ссылка такого типа называется абсолютной. В Visual FoxPro кроме абсолютной ссылки, которая при большой глубине вложения объекта является слишком громоздкой, вы можете использовать относительные ссылки, т. е. ссылки относительно активных в данный момент объектов (сам объект, форма, в которую входит объект, и группа форм), что значительно сокращает список объектов ссылки и позволяет получить доступ к объекту, даже если вы не знаете его имени.
Ссылка на активную форму осуществляется с помощью свойства ActiveForm (Активная форма) объекта (_screen). Например, следующее выражение позволяет изменить заголовок активной формы:
_SCREEN.ActiveForm.Caption="Заголовок формы"
Аналогично, свойство Activecontroi (Активный элемент управления) позволяет получить доступ к объекту формы, а свойство ActivePage (Активная вкладка) – к активной вкладке формы. Например, следующее выражение позволяет изменить надпись активной кнопки:
"SCREEN.ActiveControl.Caption="Печать отчета"
При ссылке на вложенный объект вы можете использовать свойство Parent (Родительский) и ключевые слова для идентификации объекта, к которому вы хотите получить доступ. Свойство parent (Родительский) содержит ссылку на непосредственный контейнер объекта. Список ключевых слов и определяемые ими ссылки приведены в таблице 19.7.
Таблица 19.7. Ключевые слова для идентификации объектов.
Наименование | Ссылка |
---|---|
THIS | На сам объект |
THISFORM | На форму, которая содержит объект |
THISFORMSET | На группу форм, которая содержит объект |
Для примера определим цвет текущего объекта и объекта, являющегося его непосредственным контейнером, а также заголовки формы и группы форм, которые содержат данный объект:
THIS.BackColor=RGB(255.255.255) THIS.Parent.BackColor=RGB(192.0.0) THISFORM.Caption="Форма, содержащая объект" THISFORMSET.Caption="rpynna форм, содержащая объект"
Каждый объект обрабатывает связанные с ним события независимо. Поэтому контейнер не может реагировать на события вложенного в него объекта даже в том случае, если данный объект не содержит метода для обработки события, а контейнер может реагировать на данное событие.
Ранее мы рассмотрели команды создания формы и присвоения ей заголовка. Теперь дополним эти команды командами размещения в форме кнопки, являющейся по отношению к ней вложенным объектом:
frmNew=CREATEOBJECT (" FORM") frmNew.Caption="Форма, созданная с помощью команд" fmiNew.ShowO fnriNew.AddObject("Button", "CommandButton") cmdButton=frmNew.Button andButton.Visible=.T. cmdButton.Top=190 ondButton.Left=160 cmdButton.Width=7 0 cmdButton.Height=30 cmdButton.Caption="Выход"
Команда frmNew. AddObjееt ("Button", "CoiranandButton") создает В frmNew на основе базового класса CommandButton (Кнопка управления) новый объект Button (Кнопка). Следующая команда делает видимой созданную кнопку. На рис. 19.7 показана форма, созданная этими командами.
Совет
В прикладных программах объекты желательно сохранять невидимыми до полного определения всех их свойств.
Рис. 19.7. Форма с вложенным объектом – кнопкой