|
|
|
Работа с формами
|
|||
|---|---|---|---|
|
#18+
Привет всем! Помогите! Моя проблема: через exe-шку открываю форму FName1 (do form FName1). Далее ввожу в ней некоторые данные и результат вывожу в другую форму (вызвав её через do form FName2). После чего изменяю данные в форме FName1 (не закрывая FName2) и обновляю форму FName2 (FName2.refresh), на что появляется сообщ. "Object FName2 is not found". Как быть в такой ситуации? За раннее благодарю за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 15:32 |
|
||
|
Работа с формами
|
|||
|---|---|---|---|
|
#18+
При подаче команды DO FORM MyForm.scx происходит 2 события: -) Создается экземпляр формы -) Создается переменная памяти с именем по умолчанию совпадающем с именем файла SCX в которую записывается ссылка на созданный экземпляр памяти Поскольку область видимости переменной не указана явно, то переменная получает область видимости PRIVATE. Это значит, что такая переменная будет автоматически удалена после завершения метода или процедуры, где она была создана. Хотя собственно форма удалена не будет. Т.е. в данном случае, переменная FName2 была создана командой DO FORM в некотором методе формы FName1, а когда этот метод был завершен переменная также была удалена. Решений проблемы несколько: 1) Держать дополнительный объект - диспетчер открытых форм. В этот объект автоматически записывать ссылки на все открытые формы и также автоматически эти ссылки удалять 2) Массив открытых форм и так уже существует. Это массивы _SCREEN.Forms() и _VFP.Forms(). Единственное неудобство заключается в том, что в общем случае для того, чтобы найти нужную форму необходимо просканировать весь массив (перебрать все значения). Правда, если достаточно знать свойство Name-формы (нет одновременного открытия нескольких копий одной формы), то можно так: Код: plaintext 1. 2. 3. 3) Можно использовать глобальные переменные, но это довольно опасный способ. По возможности, глобальных переменных должно быть как можно меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 15:53 |
|
||
|
Работа с формами
|
|||
|---|---|---|---|
|
#18+
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. С уважением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 19:37 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=220&tid=1590184]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 329ms |

| 0 / 0 |
