powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (Do Form) MyForm Name oMyForm и модальность формы
3 сообщений из 3, страница 1 из 1
(Do Form) MyForm Name oMyForm и модальность формы
    #33631525
JuniorFoxik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обьясните, пожалуйста, в чем дело и как сделать лучше.
Суть: Есть 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
(Do Form) MyForm Name oMyForm и модальность формы
    #33632244
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По умолчанию, если область видимости переменной не объявлена явно, то она получает область видимости 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
(Do Form) MyForm Name oMyForm и модальность формы
    #33633911
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi JuniorFoxik!

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

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


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