powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как открыть несколько экземпляров одной формы одновременно
12 сообщений из 12, страница 1 из 1
Как открыть несколько экземпляров одной формы одновременно
    #32022730
Iks3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста, можно ли открыть несколько экземпляров одной формы одновременно с разными данными?
...
Рейтинг: 0 / 0
Как открыть несколько экземпляров одной формы одновременно
    #32022796
....
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно. Открывай их не через DoCmd.OpenForm, а через создание объектной переменной, т.е.
Dim frm As Form
Set frm = New Form_YourFormName

сколько таких переменных сделаешь - столько форм и получишь.
...
Рейтинг: 0 / 0
Как открыть несколько экземпляров одной формы одновременно
    #32022812
Iks3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То, что Вы предлагаете, я написала. А каким оператором открыть полученную форму, если не OpenForm?
...
Рейтинг: 0 / 0
Как открыть несколько экземпляров одной формы одновременно
    #32022843
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OpenForm - это макрокоманда, упрощающая работу с формами. При выполнении OpenForm создаётся экземпляр формы с указанным именем и делается видимым и активным. Эта форма автоматически добавляется в семейство Forms.
Если в семействе Forms уже есть форма с таким именем, то новая форма не создаётся, а только становится видимой и активной (ну и обновляются данные).
Поэтому для открытия нескольких экземпляров одной формы нужно использовать другой способ.
Вам нужно создавать столько объектных переменных типа Form_YourFormName, сколько форм одновременно будет открыто. Учтите, что открываемая форма должна иметь модуль формы.
Чтобы форма стала видимой, установите Visible=true.
...
Рейтинг: 0 / 0
Как открыть несколько экземпляров одной формы одновременно
    #32022873
Iks3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
После команды Visible=true форма появляется на экране и сразу пропадает. А как удержать ее на экране?
...
Рейтинг: 0 / 0
Как открыть несколько экземпляров одной формы одновременно
    #32022893
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример модуля:
\nOption Compare Database
Option Explicit
Public MyForms As New Collection ' Создаем объект Collection, где будут храниться формы
' Формы существуют, пока живы объектные переменные - элементы коллекции

Public Sub CreateForm1() ' Создаёт экземпляр формы "Form1"
Dim Key As String
Dim frm As New Form_Form1 ' Временная переменная - форма (должна быть форма с именем "Form1")
Key = frm.Caption & str(MyForms.Count) ' Ключ - идентификатор формы в коллекции
frm.Caption = Key
frm.Visible = True
MyForms.Add frm, Key ' добавляется в коллекцию
Set frm = Nothing
End Sub

Public Sub CloseForm1(Key As String) ' Удаляет экземпляр формы из коллекции (она тут-же исчезает)
MyForms.Remove Key
End Sub

Public Sub TestCreate() ' Создаёт 5 экземпляров формы "Form1"
CreateForm1
CreateForm1
CreateForm1
CreateForm1
CreateForm1
End Sub
...
Рейтинг: 0 / 0
Как открыть несколько экземпляров одной формы одновременно
    #32022993
....
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исчезает, скорее всего, потому, что 1)переменная типа Form локальная 2) из функции выходишь 3) переменная становится nothing 4)при удалении последней ссылки объект самоуничтожается
Как с этим бороться.
Способ 1. Хранить ссылку на форму в глобальной переменной или коллекции (если их неизвестное заранее количество) - то что предложил Владимир Смирнов.
Способ 2. Хранить ссылку на форму в самой форме. Т.е. после создания формы вызвать ее метод, куда передать ее саму, и в этом методе сохранить переданный параметр в переменной на уровне модуля класса. На Unload'е формы (или на Close) нужно енту переменную очистить.
Второй способ более сложный, зато глобальная область не засирается. Да и прикольнее так - форма сама себя в памяти удерживает. Мюнхаузен блин.
...
Рейтинг: 0 / 0
Как открыть несколько экземпляров одной формы одновременно
    #32023048
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Способ 2. Хранить ссылку на форму в самой форме.
Это конечно забавно, "прикольнее так", но я такие трюки не рекомендую.
При сохранении формы в глобальной переменной к ней (форме) можно обратиться из других модулей (форм) по имени переменной. Также, если экземпляры форм хранятся как элементы коллекции (а коллекцию - глобальная переменная), то обращение к этим формам возможно через элемент коллекции.
Например: MyForms(1).Visible - видимость формы с номером 1,
MyForms("Форма 3").Caption - подпись формы с ключом "Форма 3".
А при способе 2 придётся перебирать семейство Forms в поисках нужной формы.
...
Рейтинг: 0 / 0
Как открыть несколько экземпляров одной формы одновременно
    #32023112
....
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неправильно. Формы, открытые через создание переменной класса, НЕДОСТУПНЫ через коллекцию Forms. Это иногда хорошо, иногда плохо.
Такие трюки можно порекомендовать, если есть самодостаточная форма, к которой никогда не будет обращений извне, и вся работа, связанная с этой формой, делается в ее же модуле. Плюс такого подхода - защита от дурака-программиста при проектировании "системных" форм. Не имея доступа к форме дурак ничего и не порушит.
...
Рейтинг: 0 / 0
Как открыть несколько экземпляров одной формы одновременно
    #32023206
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос к ....
Что Вы понимаете под словами "НЕДОСТУПНЫ через коллекцию Forms"?
И что под словами "защита от дурака-программиста".
Если "дурак-программист" - это тот, кто не знает как обратиться к форме через семейство Forms, ну тогда от него это защита. Хотя рассчитывать на ТАКУЮ защиту может только другой такой-же дурак-программист.
...
Рейтинг: 0 / 0
Как открыть несколько экземпляров одной формы одновременно
    #32023392
....
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да то и понимаю, что такие формы отсутствуют в коллекции Forms. Нет их там. Да и не может быть - обращение к элементам коллекции по ключу, для формы это имя, несколько форм с одинаковым именем в одну коллекцию Forms не запихнуть.
Формы, открытые через создание модуля класса доступны ТОЛЬКО через сохраненную внешнюю ссылку (переменную). Нет доступной ссылки - нет и доступа к форме. Это и подразумевается под "защитой от дурака". Умеет дурак пользоваться коллекцией Forms или нет - его личные проблемы.
...
Рейтинг: 0 / 0
Как открыть несколько экземпляров одной формы одновременно
    #32023453
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот выдержка из справочника MS Access (раздел "Семейство Forms") :

Семейство Forms содержит все формы, открытые в данный момент в базе данных Microsoft Access.

Дополнительные сведения

Семейство Forms используется в программах Visual Basic или в выражениях для ссылок на формы, открытые в данный момент. Например, для задания или возвращения значений свойств конкретных форм бывает удобно организовать перебор всех компонентов семейства Forms.

Совет. Компоненты семейства обычно перебираются с помощью инструкции For Each...Next.

Ну вот, мнения разошлись, Microsoft (видимо от незнания) полагает что "Forms содержит все формы, открытые в данный момент ".
А вот господин .... категорически уверен, что это не так (откуда такие познания?). Видимо, судя по его последней фразе, все, кроме него, дураки. Независимо от того, умеют пользоваться семейством Forms, или нет. Просто не знают тех великих откровений, известных только ему (даже писать с маленькой буквы неловко - надо бы ЕМУ).
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как открыть несколько экземпляров одной формы одновременно
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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