powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как закрыть все открытые юзером формы через For Each ?
36 сообщений из 36, показаны все 2 страниц
Как закрыть все открытые юзером формы через For Each ?
    #32419153
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо с помощью Public Sub позакрывать все формы открытые юзером.
Сначала определить загружена ли форма и если она открыта закрыть ее.
Но вот как?
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32419155
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
свойство isloaded у объектов семейcтва allforms
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32419232
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
этого свойства что то не нашел.

Public Sub CloseAllForms()

Dim allfrm As AllForms


?????

End Sub
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32419246
Фотография Alviga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For each xForm in Forms
Unload xForm
next
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32419327
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sub CloseAllForms()
Do Until Forms.Count = 0
DoCmd.Close acForm, Forms(0).Name
Loop
End Sub
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32419391
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем. Действует.
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32420012
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ГавриловDo Until Forms.Count = 0
DoCmd.Close acForm, Forms(0).Name
Loop
Только это не будет работать с несколькими экземплярами формы.
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32420386
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeoТолько это не будет работать с несколькими экземплярами формы.
У меня работает. Что я неправильно делаю? :-)
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32420445
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня тоже работает.
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32420455
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы точно несколько экземпляров одной формы открываете?
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32420483
проверили. Работает.
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32420529
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если в коллекции нет ни одной формы хотя бы в одном экземпляре, то значит нет и в нескольких экземплярах? :-)
утверждение
А бывают формы, которые открыты, но в коллекции не значатся (типа приехали в москву и живут без регистрации :-)
шутка
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32420901
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА если в коллекции нет ни одной формы хотя бы в одном экземпляре, то значит нет и в нескольких экземплярах? :-)
Осторожнее надо, чуть голову не сломал, читая это :-)
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421533
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Function aaa()
  Dim f1 As Form
  Dim f2 As Form
  Set f1 = New Form_Форма1
  Set f2 = New Form_Форма1
  f1.Visible = True
  f2.Visible = True
'***************
  MsgBox Forms( 0 ).Name
  Do Until Forms.Count =  0 
    DoCmd.Close acForm, Forms( 0 ).Name
  Loop
End Function


Странно. На работе (а97 sr1) не работает. Дома (a97 sr2, aXP sp 2) работает.
Вывод - ставьте сервис-паки.
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421557
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
GeoDoCmd.Close acForm, Forms(0).Name
Если открыто 10 форм под названием MyForm и я делаю
DoCmd.Close acForm, "MyForm"
то закрывается произвольная из 10? Разве это может кого-то устраивать?
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421574
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ВС
Когда надо закрыть все формы, то может.
А если при этом выскакивает ошибка, то не может :)
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421599
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Секундочку. У меня принципиальный вопрос. Прошу прощения, что задаю его тут, а не в специальном топике про экземпляры форм.

DoCmd.Close acForm, имя - это единственный способ закрыть форму??? Только по имени??? И в кнопке "Выход" тоже???

Если открыто 10 форм под названием MyForm и у каждой в кнопке "Выход" написано
DoCmd.Close acForm, Me.Name
то кнопка "Выход" закрывает произвольную форму из 10???
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421697
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторDoCmd.Close acForm, имя - это единственный способ закрыть форму??? Только по имени??
Ну почему, есть и кнопка X :)
Если форма открыта через объектную переменную, то тоже понятно как ее можно закрыть.
авторЕсли открыто 10 форм под названием MyForm и у каждой в кнопке "Выход" написано
DoCmd.Close acForm, Me.Name
то кнопка "Выход" закрывает произвольную форму из 10???
Да, действительно, кнопка закрывает первую из форм. Т.е. нажимаем кнопку выход (в которой DoCmd.Close acForm, Me.Name) на одной форме, а может закрытся другая (проверено).
Правда, можно закрывать форму командой DoCmd.Close. Тогда закрывается активная форма. Но мне кажется, что иногда бываю глюки, может просто кажется...
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421701
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Глюки действительно бывают. Поэтому я приучился писать DoCmd.Close acForm, Me.Name, а не просто DoCmd.Close.

И выходит, что на форме, открываемой в нескольких экземплярах, невозможно сделать кнопку "Выход"???
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421703
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меняй ей Caption при открытии, а потом проверяй его на соответствие в For Each
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421706
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИ выходит, что на форме, открываемой в нескольких экземплярах, невозможно сделать кнопку "Выход"???
Ну почему? Кнопку-то можно, только код делать другой, например, вызывающий действие по сбросу объектной переменной.
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421707
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
У студентов как всегда богатая фантазия... :^(
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421712
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Это было Темному.

2 Serge Gavrilov:
А как из формы сослаться на объектную переменную, которая ссылается на эту форму? Сработает ли такое:

for each o in mycollection
if o.form is me then...
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421714
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМеняй ей Caption при открытии, а потом проверяй его на соответствие в For Each
Только как это поможет закрыть конкретную форму?
Все формы и так закрываются по по приведеному мной коду.
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421716
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дай побуйствовать фантазии
А все формы можно и kill process msaccess закрыть :)
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421720
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну схемы же могут быть разные.
Сейчас я обычно делаю ссылку на форму в самой форме.

Private mfrmMe As Access.Form

Private Sub Form_Open(Cancel As Integer)
Set mfrmMe = Me
End Sub

Тогда на кнопку "Выход":

Private Sub cmdClose_Click()
Set mfrmMe = Nothing
End Sub

И все...
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421722
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Сам спросил и сам ответил. Слава Всевышнему, это работает. Вот что я написал:

1. Класс fff:

Код: plaintext
1.
2.
Public f As Form
Public n As Integer

2. В произвольном модуле:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public c As New Collection

Sub TryForms()
Dim i As Integer, fff0 As fff
For i =  1  To  10 
    Set fff0 = New fff
    Set fff0.f = New Form_Form1
    fff0.f.Visible = True
    fff0.n = i
    c.Add fff0
Next
End Sub

3. В форме Form1:

Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Detail_Click()
Dim fff0 As fff
For Each fff0 In c
    If fff0.f Is Me Then MsgBox fff0.n
Next
End Sub

Открылись 10 форм. Кликаю по ним и получаю разные числа от 1 до 10. Да здравствует Is Me!
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421723
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
авторSet mfrmMe = Nothing
Но это только если mfrmMe является последней ссылкой на форму. А где та ссылка, при помощи которой форма была открыта? Она ведь была открыта через Set...New?
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421725
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНо это только если mfrmMe является последней ссылкой на форму.
Как понять последней? Она является единственной для данного экземпляра формы.
автор
А где та ссылка, при помощи которой форма была открыта? Она ведь была открыта через Set...New?
Она сделала свое дело и давно умерла.
Это же рассматривалось в топике топике экземпляры форм.
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421730
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
авторОна сделала свое дело и давно умерла.
Ну, ОК. Об этом надо дополнительно заботиться. Ведь если я буду пользоваться одной переменной для открывания всех этих форм, то в каждый момент времени эта переменная будет содержать ссылку на последнюю открытую форму. Это был бы красивый баг, если бы не удавалось закрыть именно ту форму, которая открыта последней.
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421734
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор автор
Она сделала свое дело и давно умерла.

Ну, ОК. Об этом надо дополнительно заботиться. Ведь если я буду пользоваться одной переменной для открывания всех этих форм, то в каждый момент времени эта переменная будет содержать ссылку на последнюю открытую форму. Это был бы красивый баг, если бы не удавалось закрыть именно ту форму, которая открыта последней.

Извини Владимир Саныч (ты вроде просил не использовать местоимение вы),
но ты, мне кажется не совсем понял.
В каждый момент времени этой переменной просто нет поэтому и ссылки она содержать не может.
Вот примерная процедура открытия экземпляра формы
Public Function OpenFormInstance()
Dim frm As Form_Form1
Set frm = New Form_Form1
frm.Initialize
Set frm = Nothing
End Function
В Initialize я кое что проверяю и делаю форму видимой.
Заметь, что ссылка приватная и убивается. А форма живет своей жизнью с помощью ссылки, которая содержится в ней самой.
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421737
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я все понимаю. В этом примере все нормально. Но кто-нибудь может, не подумав, написать так:

Public frm As Form_Form1
Public Function OpenFormInstance()
Set frm = New Form_Form1
frm.Initialize
End Function

И это будет баг.
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421739
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИ это будет баг.
Конечно, поэтому я это и не рассматривал, а привел одну из схем, кажущуюся мне наиболее простой и легко управляемой. Не надо ни за чем следить (например за коллекций форм), форма сама себя контролирует.
Согласись, ведь это самый простой вариант. И кнопка "Выход" работает :-)
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421740
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Владимир Саныч за общение, но надо еще немного поработать и спать, а то время у меня уже половина третьего :(
Спокойной ночи.
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32421746
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Да, согласен.

Спокойной ночи и с добрым утром!
...
Рейтинг: 0 / 0
Как закрыть все открытые юзером формы через For Each ?
    #32422109
авторДа здравствует Is Me!

1. На этом форуме видел обсуждение проблемы в 97 с операторм IS и несколькими ссылками (т.е. разными объектными переменными) на ОДНУ и ТУ же форму (вернее - на один и тот же экземпляр одной формы). Т.ч. не очевидно, что Is Me будет работать всегда в 97.


2. а для непронумерованных (в классе-коллекции форм) можно сделать (если не работает без сервис паков DoCmd.Close acForm, F.name):
Код: plaintext
1.
2.
3.
for i= 0  to Forms.count- 1   ...
 if Forms(i) Is Me Then
    Forms(i).SetFocus
    DoCmd.Close
(т.е. заведомо передаем фокус, а потом закрываем активное окно)

глюки DoCmd.Close бывают, кажется, в разных ассинхронных ситуациях (шибко заметны в сетке - на одной машине все ок, а на другой - в 100% закрывается другое окно(форма/отчет)), но при явной передаче фокуса есть надежда на безглючность.
При этом неприятность может состояться, если обе конструкции (IS me и DoCmd.Close acForm, F.name) глючат в одной и той же версии 97.
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как закрыть все открытые юзером формы через For Each ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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