powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как закрыть все формы в проекте, кроме активной?
17 сообщений из 17, страница 1 из 1
Как закрыть все формы в проекте, кроме активной?
    #32503738
Фотография Slavinag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Access 2000, ADP, MS SQL Server 2000.

В проете 15 форм, причем 14 из них могут быть одновременно открыты.

Задача: при открытии 15-й (Админской) формы проверять, открыти ли остальные, и если открыты, то все позакрывать с сохранением данных,
чтобы осталась толко одна (админская).
...
Рейтинг: 0 / 0
Как закрыть все формы в проекте, кроме активной?
    #32503744
Nektov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
for each frm in CurrentProject.AllForms
      if not frm.Name = "Админская форма" then frm.close
next frm

ну по крайней мере я бы делал так
...
Рейтинг: 0 / 0
Как закрыть все формы в проекте, кроме активной?
    #32503791
Фотография Slavinag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас попробую.
...
Рейтинг: 0 / 0
Как закрыть все формы в проекте, кроме активной?
    #32503842
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточнение :)

Код: plaintext
1.
2.
3.
for each frm in CurrentProject.AllForms
      if not frm.Name = Screen.ActiveForm.Name then frm.close
next frm
...
Рейтинг: 0 / 0
Как закрыть все формы в проекте, кроме активной?
    #32503925
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
Dim i as Long
For i = Forms.Count - 1  To  0  Step - 1 
   If Not Forms(i).Name = Screen.ActiveForm.Name Then Docmd.Close AcForm, Forms(i).Name
Next i
...
Рейтинг: 0 / 0
Как закрыть все формы в проекте, кроме активной?
    #32503936
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну цикл по Forms.Count (да еще и в обратном порядке) - это наворот (ИМХО)

А, то что форма не правильно закрывается - это факт
Спасибо, а то я скопировал, а не посмотрел :)
...
Рейтинг: 0 / 0
Как закрыть все формы в проекте, кроме активной?
    #32503944
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточнение :)
Если неактивная(да еще может быть невидимая) форма
была открыта не через DoCmd а как экземпляр через Set,
то Docmd.Close AcForm, Forms(i).Name работать не будет.
...
Рейтинг: 0 / 0
Как закрыть все формы в проекте, кроме активной?
    #32503951
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин - Nektov - ну кто так пишет?
И са напортачил и мну с толку сбил :)
Зачем по всем формам-то бежать?

Код: plaintext
1.
2.
3.
4.
Dim frm as Form
For each frm In Forms
   If Not frm.Name = Screen.ActiveForm.Name Then Docmd.Close AcForm, frm.Name
Next
...
Рейтинг: 0 / 0
Как закрыть все формы в проекте, кроме активной?
    #32503992
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LatukЕсли неактивная(да еще может быть невидимая) форма \r
была открыта не через DoCmd а как экземпляр через Set, \r
то Docmd.Close AcForm, Forms(i).Name работать не будет.\r
У меня работает. Что я неправильно делаю? :-)\r
/topic/76552&pg=-1\r
\r
paparomeНу цикл по Forms.Count (да еще и в обратном порядке) - это наворот (ИМХО) \r
\r
Это не наворот а необходимость при работе с коллекцией, когда число членов коллекции меняется. Ваш способ может не закрыть все формы
...
Рейтинг: 0 / 0
Как закрыть все формы в проекте, кроме активной?
    #32504001
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не наворот а необходимость при работе с коллекцией, когда число членов коллекции меняется. Ваш способ может не закрыть все формы

Пример можно, а то что-то мало вериться
...
Рейтинг: 0 / 0
Как закрыть все формы в проекте, кроме активной?
    #32504042
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПример можно, а то что-то мало вериться
Можно, откройте штук пять форм и закройте способом For Each ...
...
Рейтинг: 0 / 0
Как закрыть все формы в проекте, кроме активной?
    #32504061
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК

Согласен :)
...
Рейтинг: 0 / 0
Как закрыть все формы в проекте, кроме активной?
    #32504117
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Docmd.Close AcForm, Forms(i).Name работать не будет.
>У меня работает. Что я неправильно делаю? :-)

Экземпляры форм попадают в коллекцию Forms
с одинаковыми именами
Поэтому Docmd.Close AcForm, Forms(i).Name
закроет не ту которая Forms(i),
а ту которая Forms(i).Name="XXX"
и приэтом она первая в коллекции

Моделируем ситуацию
Форма Forms(2).Name="XXX"
и еще один экземпляр Forms(5).Name="XXX"

Если Forms(2) активна мы ее проскочим
Forms(5) не активна попытавшись ее закрыть
мы закроем Forms(2)

С удивлением обнаруживаем,что закрыли активную форму,
а не активная осталась.
...
Рейтинг: 0 / 0
Как закрыть все формы в проекте, кроме активной?
    #32504126
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторУ меня работает. Что я неправильно делаю? :-)
:))
...
Рейтинг: 0 / 0
Как закрыть все формы в проекте, кроме активной?
    #32504366
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Latuk
авторС удивлением обнаруживаем,что закрыли активную форму,
а не активная осталась.
С этим я не спорю...
В предыдущеим сообщении вы заметили
авторЕсли неактивная(да еще может быть невидимая) форма
была открыта не через DoCmd а как экземпляр через Set,
то Docmd.Close AcForm, Forms(i).Name работать не будет.
Я ответил, что это не так, я не прав?
Работать, т.е. закрывать будет, но не так как хотелось бы. Это другой вопрос, и по моему решаемый, исходя из предложений, имеющихся в обсуждении, на которое я сослался.
Решение о способе должно учитывать конкретную ситуацию.
...
Рейтинг: 0 / 0
Как закрыть все формы в проекте, кроме активной?
    #32504536
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если неправильную нередсказуемую работу работой то да
Хотя это уже теология :)

Указанные в обсужнении сособы громоздки и не однозначны
например если уничтожать ссылки в коллекции,
то форма не закроется если есть еще какие нибудь ссылки на нее.
Или DoCmd.Close не может закрыть невидимую форму.

Есть гораздо менее громоздкий и легко заменяющий конструкцию
Docmd.Close AcForm, Forms(i).Name способ

Закрыть форму как виндовс окно

Public Const SW_HIDE = 0
Public Const SW_SHOWNORMAL = 1
Public Const SW_NORMAL = 1
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_MAXIMIZE = 3
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOW = 5
Public Const SW_MINIMIZE = 6
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNA = 8
Public Const SW_RESTORE = 9
Public Const SW_SHOWDEFAULT = 10
Public Const SW_MAX = 10
Public Const WM_CLOSE = &H10
Public Const INFINITE = &HFFFFFFFF

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any _
) _
As Long


Заменяем Docmd.Close AcForm, frm.Name
на Call SendMessage(frm.hwnd, WM_CLOSE, 0&, 0&)
И все.
...
Рейтинг: 0 / 0
Как закрыть все формы в проекте, кроме активной?
    #32504664
2Латук

сафсем не па мушски, слюшай, да.

ви утверждал, что конструкций не работает.
Он работает.
Признайся, что не прав, не бери грех на душа, да.


а апёй тоша мошно. пачему нельзя.
неспаритвна, тольки
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как закрыть все формы в проекте, кроме активной?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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