Распечатать страницу

Набор форм в Microsoft Visual FoxPro

« Назад

При проектировании формы можно образовать набор форм – объект из нескольких форм. Для этого после создания в проектировщике первой формы выполняется команда меню Form – Create Form Set, формирующая набор и добавляющая в него вторую форму.

После этого становятся активными пункты меню Form – Add New Form и Form – Remove Form, позволяющие соответственно добавить и удалить форму из набора. Вторая команда доступна до тех пор, пока в наборе присутствует более одной формы. Набор с одной формой лишен смысла, и он удаляется командой меню Form – Remove Form Set. Оставшаяся форма вновь приобретает статус самостоятельного объекта.

Объект-ссылка

THISFORMSET.PropertyName | ObjectName

позволяет ссылаться на текущий набор форм в коде события, метода или определении класса.

Параметры:

PropertyName – имя свойства набора форм или его объекта.

ObjectName – объект в наборе форм.

Пример. В наборе SomeFormSet две формы с именами Form1 и Form2. Каждая форма имеет кнопку с именем Command1, но с разными заданными в окне свойств заголовками (рис. 10.3).

158.1.-Набор-из-двух-форм

Рис. 10.3. Набор из двух форм

Обработчики события Click обеих форм содержат операторы:

ThisFormSet.Form1.Command1.Caption = "Время " + Time( )

ThisFormSet.Form2.Command1.Caption = "Закрыть " + Transform(Time( ))

Обработчик события Click кнопки Command1 формы Form1 тоже имеет две строки кода:

This.Caption = "Время " + Time( )

ThisFormSet.Form2.Command1.Caption = "Закрыть " + Time( )

Поэтому каждый удар мышью по любой из форм, а также по кнопке Command1 формы Form1 приводит к отображению прежних заголовков кнопок с указанием времени удара (рис. 10.4).

158.2.-Новые-заголовки-форм-из-набора-SomeFormSet

Рис. 10.4. Новые заголовки форм из набора SomeFormSet

В обработчике события Click кнопки Command1 формы Form2 содержится вызов метода Release набора форм, закрывающего и освобождающего этот набор:

ThisFormSet.Release

Замечание. Описание свойств, методов и событий набора форм см. в справке VFP, тема FormSet Object.

Пример. Выводятся имена форм, имеющихся в наборе форм SomeFormSet.

&& Употребляем опцию NOSHOW, чтобы направить вывод в главное окно VFP

do form d:\SomeFormSet.scx noshow

&&

&& Используем цикл FOR EACH

for each frm in SomeFormSet.Forms

? frm.Name

next

&&

&& То же в цикле "с параметром"

for ind = 1 to SomeFormSet.FormCount

? SomeFormSet.Forms (ind).Name

next

SomeFormSet.Show           && Показываем набор форм

Список открытых форм и других окон приложения отображается в меню Windows. Программно получить список всех открытых форм позволяет системная переменная _SCREEN, а точнее ее свойства Forms и FormCount. Принадлежность формы набору форм, определяется по значению ее свойства Parent.

Пример. Выводятся имена открытых форм, а также имена форм, входящих в набор форм.

if _SCREEN.FormCount > 0 then

for each frm in _SCREEN.Forms

? frm.Name                         && Имя открытой формы

try

Parent = frm.Parent

? 'Форма ', frm.Name, ' принадлежит набору форм ', Parent.Name

    catch

    ? 'Форма ', frm.Name, ' не входит в набор форм'  endTry

next

else

wait window 'Нет открытых форм!'

endif