Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VisualFoxPro.doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

10.3. Выполнение формы

10.3.1. Команда do form

Команда

DO FORM FormName | ? [NAME VarName [LINKED]] [WITH cParameterList] [TO VarName] [NOSHOW]

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

Опции и параметры:

FormName – имя файла формы или набора форм.

NAME VarName [LINKED] – задает имя переменной или элемента существующего массива, используя которое можно ссылаться на форму или набор форм. Тип VarName – Object.

Если опция NAME опущена, то VFP создаст переменную типа Object, с тем же именем, что и имя файла формы или набора форм.

Если имеется опция LINKED, то форма присоединяется к переменной, ассоциированной с формой. Тогда если ассоциированная переменная оказывается вне области видимости или освобождается, то освобождается и форма, например если открыта форма

do form (Home(2) + 'Solution\Controls\Timer\Swatch.scx') name sw linked

то после выполнения

release sw

она закроется.

WITH cParameterList – список передаваемых форме или набору форм параметров.

Параметры передаются обработчику события Init, если свойство формы (набора форм) WindowType – это 0 (ModeLess) или 1 (Modal), и передаются обработчику события Load, если WindowType – это 2 (Read) или 3 (ReadModal).

Замечание. Значения 2 (Read) и 3 (ReadModal) свойства WindowType включены для совместимости с прежними версиями; они доступны только для форм, полученных в результате конвертирования форм предыдущих версий FoxPro.

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

Команда RETURN value задается в обработчике события Unload формы или набора форм. Если команда отсутствует или выполнена без параметра value, то VarName получит значение .T.

Опция TO может быть использована, если свойство WindowType формы или набора форм имеет значение 1 (Modal).

Если обработчик события Load формы или набора форм возвращает .F., предотвращая открытие формы или набора форм, то обработчик события Unload не вернет никакого значения для VarName.

NOSHOW – метод Show не вызывается при запуске формы (набора форм). Форма исполняется, но не видна. Для ее отображения следует установить свойство Visible в .T. или выполнить метод Show, например:

do form (Home(2) + 'Solution\Controls\Timer\Swatch.scx') noshow

Swatch.Visble = .T. && или: Swatch.Show

Если опция NOSHOW опущена, то DO FORM выполнит метод Show формы или набора форм.

10.3.2. Отображение формы, созданной программно

Получим прежде ссылку на объект oForm формы:

oForm = CreateObject("Form")

Отобразить форму (сделать ее видимой) позволяет ее метод Show или свойство Visible:

oForm.Show && или: Form.Visible = .T.

Однако две строки кода

oForm = CreateObject("Form")

oForm.Show

не приведут к появлению формы. Точнее она пропадет сразу после появления.

Устранить этот недостаток можно, объявив переменную oForm как глобальную:

public oForm

oForm = CreateObject("Form")

oForm.Show

либо использовав команду READ EVENTS, начинающую обработку событий:

on key label Alt+F1 clear events

oForm = CreateObject("Form")

oForm.Show

read events

wait "Обработка событий завершена" window nowait

Приведенный код гарантирует, что обработка событий будет завершена после нажатия на Alt+F1.

Команды READ EVENTS и CLEAR EVENTS употребляются при организации приложения в виде исполняемого EXE-файла (см. команду BUILD EXE).

Форма будет запущена без главного окна VFP, если ее свойству ShowWindow присвоить значение 2, а свойству Visible главного окна – .F. Поскольку на этапе исполнения свойство ShowWindow доступно только для чтения, то для достижения первой цели придется либо создать форму средствами проектировщика, либо ввести новый класс, например SomeForm, в котором определить значение рассматриваемого свойства:

on key label Alt+F1 clear events

_SCREEN.Visible = .F.

oForm = CreateObject("SomeForm")

oForm.Show

read events

define class SomeForm as Form

ShowWindow = 2

endDefine

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

oForm = CreateObject("Form")

oForm.Show(1) && Показываем форму модально

Замечание. Форма не будет создан, если событие Load вернет .F. При этом событие Destroy формы не выполняется.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]