|
Как открыть несколько экземпляров одной формы одновременно
|
|||
---|---|---|---|
#18+
Подскажите, пожалуйста, можно ли открыть несколько экземпляров одной формы одновременно с разными данными? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2002, 09:37 |
|
Как открыть несколько экземпляров одной формы одновременно
|
|||
---|---|---|---|
#18+
Можно. Открывай их не через DoCmd.OpenForm, а через создание объектной переменной, т.е. Dim frm As Form Set frm = New Form_YourFormName сколько таких переменных сделаешь - столько форм и получишь. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2002, 17:18 |
|
Как открыть несколько экземпляров одной формы одновременно
|
|||
---|---|---|---|
#18+
То, что Вы предлагаете, я написала. А каким оператором открыть полученную форму, если не OpenForm? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2002, 20:16 |
|
Как открыть несколько экземпляров одной формы одновременно
|
|||
---|---|---|---|
#18+
OpenForm - это макрокоманда, упрощающая работу с формами. При выполнении OpenForm создаётся экземпляр формы с указанным именем и делается видимым и активным. Эта форма автоматически добавляется в семейство Forms. Если в семействе Forms уже есть форма с таким именем, то новая форма не создаётся, а только становится видимой и активной (ну и обновляются данные). Поэтому для открытия нескольких экземпляров одной формы нужно использовать другой способ. Вам нужно создавать столько объектных переменных типа Form_YourFormName, сколько форм одновременно будет открыто. Учтите, что открываемая форма должна иметь модуль формы. Чтобы форма стала видимой, установите Visible=true. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2002, 08:35 |
|
Как открыть несколько экземпляров одной формы одновременно
|
|||
---|---|---|---|
#18+
После команды Visible=true форма появляется на экране и сразу пропадает. А как удержать ее на экране? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2002, 12:27 |
|
Как открыть несколько экземпляров одной формы одновременно
|
|||
---|---|---|---|
#18+
Пример модуля: \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 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2002, 14:22 |
|
Как открыть несколько экземпляров одной формы одновременно
|
|||
---|---|---|---|
#18+
Исчезает, скорее всего, потому, что 1)переменная типа Form локальная 2) из функции выходишь 3) переменная становится nothing 4)при удалении последней ссылки объект самоуничтожается Как с этим бороться. Способ 1. Хранить ссылку на форму в глобальной переменной или коллекции (если их неизвестное заранее количество) - то что предложил Владимир Смирнов. Способ 2. Хранить ссылку на форму в самой форме. Т.е. после создания формы вызвать ее метод, куда передать ее саму, и в этом методе сохранить переданный параметр в переменной на уровне модуля класса. На Unload'е формы (или на Close) нужно енту переменную очистить. Второй способ более сложный, зато глобальная область не засирается. Да и прикольнее так - форма сама себя в памяти удерживает. Мюнхаузен блин. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2002, 12:21 |
|
Как открыть несколько экземпляров одной формы одновременно
|
|||
---|---|---|---|
#18+
>>Способ 2. Хранить ссылку на форму в самой форме. Это конечно забавно, "прикольнее так", но я такие трюки не рекомендую. При сохранении формы в глобальной переменной к ней (форме) можно обратиться из других модулей (форм) по имени переменной. Также, если экземпляры форм хранятся как элементы коллекции (а коллекцию - глобальная переменная), то обращение к этим формам возможно через элемент коллекции. Например: MyForms(1).Visible - видимость формы с номером 1, MyForms("Форма 3").Caption - подпись формы с ключом "Форма 3". А при способе 2 придётся перебирать семейство Forms в поисках нужной формы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2002, 06:17 |
|
Как открыть несколько экземпляров одной формы одновременно
|
|||
---|---|---|---|
#18+
Неправильно. Формы, открытые через создание переменной класса, НЕДОСТУПНЫ через коллекцию Forms. Это иногда хорошо, иногда плохо. Такие трюки можно порекомендовать, если есть самодостаточная форма, к которой никогда не будет обращений извне, и вся работа, связанная с этой формой, делается в ее же модуле. Плюс такого подхода - защита от дурака-программиста при проектировании "системных" форм. Не имея доступа к форме дурак ничего и не порушит. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2002, 11:37 |
|
Как открыть несколько экземпляров одной формы одновременно
|
|||
---|---|---|---|
#18+
Вопрос к .... Что Вы понимаете под словами "НЕДОСТУПНЫ через коллекцию Forms"? И что под словами "защита от дурака-программиста". Если "дурак-программист" - это тот, кто не знает как обратиться к форме через семейство Forms, ну тогда от него это защита. Хотя рассчитывать на ТАКУЮ защиту может только другой такой-же дурак-программист. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2002, 05:14 |
|
Как открыть несколько экземпляров одной формы одновременно
|
|||
---|---|---|---|
#18+
Да то и понимаю, что такие формы отсутствуют в коллекции Forms. Нет их там. Да и не может быть - обращение к элементам коллекции по ключу, для формы это имя, несколько форм с одинаковым именем в одну коллекцию Forms не запихнуть. Формы, открытые через создание модуля класса доступны ТОЛЬКО через сохраненную внешнюю ссылку (переменную). Нет доступной ссылки - нет и доступа к форме. Это и подразумевается под "защитой от дурака". Умеет дурак пользоваться коллекцией Forms или нет - его личные проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2002, 12:43 |
|
Как открыть несколько экземпляров одной формы одновременно
|
|||
---|---|---|---|
#18+
Вот выдержка из справочника MS Access (раздел "Семейство Forms") : Семейство Forms содержит все формы, открытые в данный момент в базе данных Microsoft Access. Дополнительные сведения Семейство Forms используется в программах Visual Basic или в выражениях для ссылок на формы, открытые в данный момент. Например, для задания или возвращения значений свойств конкретных форм бывает удобно организовать перебор всех компонентов семейства Forms. Совет. Компоненты семейства обычно перебираются с помощью инструкции For Each...Next. Ну вот, мнения разошлись, Microsoft (видимо от незнания) полагает что "Forms содержит все формы, открытые в данный момент ". А вот господин .... категорически уверен, что это не так (откуда такие познания?). Видимо, судя по его последней фразе, все, кроме него, дураки. Независимо от того, умеют пользоваться семейством Forms, или нет. Просто не знают тех великих откровений, известных только ему (даже писать с маленькой буквы неловко - надо бы ЕМУ). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2002, 05:09 |
|
|
start [/forum/topic.php?fid=45&msg=32022873&tid=1683676]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
159ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 257ms |
total: | 509ms |
0 / 0 |