Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 (Do Form) MyForm Name oMyForm и модальность формы  [new]
JuniorFoxik
Guest
Обьясните, пожалуйста, в чем дело и как сделать лучше.
Суть: Есть TopLevelForm (Main), форма MyForm1, которая запускается так
Do Form MyForm Name oMyForm
и форма Search (обе - InTopLevel). В форме MyForm1 есть дерево (ctTree) и кнопочка "Поиск", по которой вызывается форма Search. В ней задается образец и осуществляетя поиск в дереве формы MyForm1 по ссылке oMyForm. После успешного поиска в дереве формы MyForm1 раскрывается и подсвечивается найденный элемент, а форма Search остается активной для повторного поиска или его продолжения.
Так вот, если форма MyForm1- Modeless, то выдается сообщение "объект oMyForm не найден", а если она модальная - все нормально. А надо, чтобы была Modeless.
Форма Search модальная и, кроме того, универсальная - вызывается из других форм для поиска.
VFP9, WinXPSP2.
Спасибо!

P.S. Всегда знала, что тут у меня пробел в теории :(
29 мар 06, 10:42    [2500686]     Ответить | Цитировать Сообщить модератору
 Re: (Do Form) MyForm Name oMyForm и модальность формы  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
По умолчанию, если область видимости переменной не объявлена явно, то она получает область видимости 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.
29 мар 06, 13:49    [2501856]     Ответить | Цитировать Сообщить модератору
 Re: (Do Form) MyForm Name oMyForm и модальность формы  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi JuniorFoxik!

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

Posted via ActualForum NNTP Server 1.3

30 мар 06, 02:44    [2504860]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить