|
Закрыть все открытые экземпляры формы
|
|||
---|---|---|---|
#18+
Как закрыть все запущенные на выполнение экземпляры формы в проекте??? Заранее благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2003, 17:02 |
|
Закрыть все открытые экземпляры формы
|
|||
---|---|---|---|
#18+
Не проверял но вероятно что-то вроде того: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2003, 17:30 |
|
Закрыть все открытые экземпляры формы
|
|||
---|---|---|---|
#18+
Пишет недопустимые значения при вызове функции ... что -то вроде этого.. По-моему ругается на: UPPER(justfname(sys(1271,loFrm))) Помогите ПЛИЗ ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2003, 18:18 |
|
Закрыть все открытые экземпляры формы
|
|||
---|---|---|---|
#18+
Видимо проблема в том, что sys(1271,loFrm) в какой-то момент возвращает .f. так как в Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
loFrm не была инициализирована. А как с этим бороться?... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2003, 19:58 |
|
Закрыть все открытые экземпляры формы
|
|||
---|---|---|---|
#18+
Вообще-то, это крайне нетривиальная задача. В общем случае решения не имеет. В каждом конкретном приложении решается по своему. Ну а самый простой способ: Код: plaintext 1. 2. 3. 4. 5. 6.
Здесь не опечатка, выбирается всегда форма с индексом 1 (один), а не с номером счетчика. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2003, 20:41 |
|
Закрыть все открытые экземпляры формы
|
|||
---|---|---|---|
#18+
Спасибо. В принципе работает. Но закрывает не только формы, но и ToolBar'ы. Как бы это дело обойти? Чтобы ToolBar'ы не трогало. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2003, 21:03 |
|
Закрыть все открытые экземпляры формы
|
|||
---|---|---|---|
#18+
2 ВладимирМ А если так Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2003, 21:16 |
|
Закрыть все открытые экземпляры формы
|
|||
---|---|---|---|
#18+
Не так не работает. Вообще ничего закрывать не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2003, 21:26 |
|
Закрыть все открытые экземпляры формы
|
|||
---|---|---|---|
#18+
Чтобы не закрывало тулбары добавь вот это if _screen.forms(1).Baseclass == "Form" ( или наоборот "Toolbar") ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2003, 10:04 |
|
Закрыть все открытые экземпляры формы
|
|||
---|---|---|---|
#18+
>Чтобы не закрывало тулбары добавь вот это >if _screen.forms(1).Baseclass == "Form" ( или наоборот "Toolbar") Логично, но почему-то не работает :( (Ничего вобще не закрывает) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2003, 13:03 |
|
Закрыть все открытые экземпляры формы
|
|||
---|---|---|---|
#18+
Спасибо. Действительно помогло. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2003, 13:31 |
|
Закрыть все открытые экземпляры формы
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Вот получилось :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2003, 13:32 |
|
Закрыть все открытые экземпляры формы
|
|||
---|---|---|---|
#18+
А так не проще? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2003, 14:46 |
|
Закрыть все открытые экземпляры формы
|
|||
---|---|---|---|
#18+
Karly При использовании коллеции форм _SCREEN.Forms следует иметь в виду, что формы добавляются в эту коллекцию "снизу". Т.е. новой форме присваивается индекс 1, а у всех остальных индекс увеличивается на 1. Кроме того, существует правило, что если метод формы не закончил свою работу или на форму существует где-либо еще ссылка, то такая форма не может быть закрыта, пока не отработает ее метод и не будут уничтожены все ссылки на нее. Это значит, что формы надо закрывать начиная с самой последней созданной иначе форма родитель просто не закроется пока не будет закрыта дочерняя форма. При переборе форм в коллекции FOR ... EACH порядок перебора вообще не известен, т.е. это принципиально неверно в данной ситуации. Метод HIDE() используется для модальных форм, поскольку его выполнение снимает точку останова на команде DO FORM и дает возможность закрыться методу родительской формы, вызвавшей эту модальную форму. Это так сказать не влезая глубоко. А есть еще куча особенностей, которые могут быть использованы в приложении и что тоже повлияет на закрытие форм. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2003, 15:00 |
|
Закрыть все открытые экземпляры формы
|
|||
---|---|---|---|
#18+
2 ВладимирМ Прочитав такое нравоучение, я решил попробовать опубликованный код на деле,чего обычно не делаю ;) Вот результат. > Т.е. новой форме присваивается индекс 1, а у всех остальных индекс увеличивается на 1. Да, не знал. Учту. Далее Код: plaintext 1. 2. 3. 4. 5.
В указанном коде была досадная ошибка - пропущен Step -1 ;))))))))) А наличие взаимных ссылок на формы (точнее, обращений к этим ссылкам) способно запутать ситуацию до полного хаоса. Не то, чтобы формы нельзя было закрыть. Но обращение к переменной, которая предполагает быть объектом, но таковым уже не является, радует пользователя сообщением Я бы просто поостерегся закрывать формы таким образом, если логика работы приложения чуть сложнее простого запуска форм. ВладимирМ привел код, который будет работать чаще других, хотя и его тоже можно поставить в "неудобное положение". ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2003, 18:19 |
|
Закрыть все открытые экземпляры формы
|
|||
---|---|---|---|
#18+
Если нужно закрыть все экземпляры одной формы, то возможно использовать Name [переменная] Linked из Do Form. Если в качестве переменной указать массив, то при удалении массива из памяти автоматически будут уничтожены все экземпляры формы, связанные с ним. Переменная либо массив естественно должны быть инициированы до запуска формы. Таким же способом можно убивать все формы, связанные с родительской формой (запущеные из неё). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2003, 09:49 |
|
|
start [/forum/topic.php?fid=41&msg=32178799&tid=1598209]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 127ms |
0 / 0 |