powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Работа с формами
3 сообщений из 3, страница 1 из 1
Работа с формами
    #34193683
tnl_kom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем! Помогите!
Моя проблема: через exe-шку открываю форму FName1 (do form FName1). Далее ввожу в ней некоторые данные и результат вывожу в другую форму (вызвав её через do form FName2). После чего изменяю данные в форме FName1 (не закрывая FName2) и обновляю форму FName2 (FName2.refresh), на что появляется сообщ. "Object FName2 is not found".
Как быть в такой ситуации?
За раннее благодарю за помощь.
...
Рейтинг: 0 / 0
Работа с формами
    #34193765
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При подаче команды

DO FORM MyForm.scx

происходит 2 события:

-) Создается экземпляр формы
-) Создается переменная памяти с именем по умолчанию совпадающем с именем файла SCX в которую записывается ссылка на созданный экземпляр памяти

Поскольку область видимости переменной не указана явно, то переменная получает область видимости PRIVATE. Это значит, что такая переменная будет автоматически удалена после завершения метода или процедуры, где она была создана. Хотя собственно форма удалена не будет.

Т.е. в данном случае, переменная FName2 была создана командой DO FORM в некотором методе формы FName1, а когда этот метод был завершен переменная также была удалена.

Решений проблемы несколько:

1) Держать дополнительный объект - диспетчер открытых форм. В этот объект автоматически записывать ссылки на все открытые формы и также автоматически эти ссылки удалять

2) Массив открытых форм и так уже существует. Это массивы _SCREEN.Forms() и _VFP.Forms(). Единственное неудобство заключается в том, что в общем случае для того, чтобы найти нужную форму необходимо просканировать весь массив (перебрать все значения).

Правда, если достаточно знать свойство Name-формы (нет одновременного открытия нескольких копий одной формы), то можно так:

Код: plaintext
1.
2.
3.
IF TYPE("_VFP.Forms('FName2')")="O"
	_VFP.Forms('FName2').Refresh()
ENDIF

3) Можно использовать глобальные переменные, но это довольно опасный способ. По возможности, глобальных переменных должно быть как можно меньше.
...
Рейтинг: 0 / 0
Работа с формами
    #34194574
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tnl_komПривет всем! Помогите!
Моя проблема: через exe-шку открываю форму FName1 (do form FName1). Далее ввожу в ней некоторые данные и результат вывожу в другую форму (вызвав её через do form FName2). После чего изменяю данные в форме FName1 (не закрывая FName2) и обновляю форму FName2 (FName2.refresh), на что появляется сообщ. "Object FName2 is not found".
Как быть в такой ситуации?
За раннее благодарю за помощь.
Создайте в Form1 свойство, например, oForm2.
Откройте в Form1 вторую форму командой DO FORM form2.scx NAME thisform.oform2 linked.
После этого свойство oForm2 будет хранить ссылку на Form2 до конца существования Form1.
Через эту ссылку можете обращаться к любым свойствам и методам формы Form2. Например, можно из Form1 вызвать обновление формы Form2: thisform.oform2.refresh

Можно сделать и обратную ссылку, и из Form2 управлять формой Form1.

С уважением.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Работа с формами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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