Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (Do Form) MyForm Name oMyForm и модальность формы / 3 сообщений из 3, страница 1 из 1
29.03.2006, 10:42
    #33631525
JuniorFoxik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Do Form) MyForm Name oMyForm и модальность формы
Обьясните, пожалуйста, в чем дело и как сделать лучше.
Суть: Есть TopLevelForm (Main), форма MyForm1, которая запускается так
Код: plaintext
Do Form MyForm Name oMyForm
и форма Search (обе - InTopLevel). В форме MyForm1 есть дерево (ctTree) и кнопочка "Поиск", по которой вызывается форма Search. В ней задается образец и осуществляетя поиск в дереве формы MyForm1 по ссылке oMyForm. После успешного поиска в дереве формы MyForm1 раскрывается и подсвечивается найденный элемент, а форма Search остается активной для повторного поиска или его продолжения.
Так вот, если форма MyForm1- Modeless, то выдается сообщение "объект oMyForm не найден", а если она модальная - все нормально. А надо, чтобы была Modeless.
Форма Search модальная и, кроме того, универсальная - вызывается из других форм для поиска.
VFP9, WinXPSP2.
Спасибо!

P.S. Всегда знала, что тут у меня пробел в теории :(
...
Рейтинг: 0 / 0
29.03.2006, 13:49
    #33632244
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Do Form) MyForm Name oMyForm и модальность формы
По умолчанию, если область видимости переменной не объявлена явно, то она получает область видимости PRIVATE. Это значит, что такая переменная будет автоматически уничтожена по завершению того метода или процедуры где она была создана.

Команда

Do Form MyForm Name oMyForm

выполняет 2 действия:

1. Создает объект-форму, на базе файла MyForm.scx
2. Присваивает переменной памяти oMyForm ссылку на созданный объект-форму

Если переменная не была объявлена до команды DO FORM, то переменная oMyForm получит область видимости PRIVATE.

Если форма MyForm - не модальная (WindowType = 0 - Modaless), то после открытия формы выполнения кода не останавливается и продолжается после команды DO FORM до завершения того метода или процедуры, где она была дана.

После завершения метода автоматически уничтожаются все переменные созданные в этом методе с областью видимости PRIVATE и LOCAL.

Таким образом, чтобы обратится к форме после завершения этого метода необходимо либо задать область видимости переменной PUBLIC, либо получить ссылку на нужную форму сканируя коллекцию _SCREEN.Forms.

Более оптимальным является создание отдельного объекта, в который будут записываться ссылки на все открывающиеся формы и эти ссылки будут автоматически удаляться при закрытии формы. По сути, написать свою собственную коллекцию _SCREEN.Forms.
...
Рейтинг: 0 / 0
30.03.2006, 02:44
    #33633911
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Do Form) MyForm Name oMyForm и модальность формы
Hi JuniorFoxik!

Мне кажется, что лучше всего будет добавить в форму "поиска" свойство,
скажем oOwner и при вызове ей передавать явно ссылку на ту форму, с которой
должна работать "поисковая" форма (видимо вызов идёт из самой этой формы,
или из меню, при том что активна как раз форма в которой и надо "искать" -
т.е. получить ссылку не составляет труда).

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (Do Form) MyForm Name oMyForm и модальность формы / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]