Набор форм в 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). Рис. 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). Рис. 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 |