Вызов одного окна несколько раз
При клике на строке DataGrid, должно открываться одно и тоже окно отображая данные из этой строки. И висеть, пока пользователь его не закроет. Один клик - одно окно. Десять кликов, - десять окон.
В принципе, речь идет не о десяти окнах, а о десяти экземплярах одного окна.
Как это сделать?
Пробовал написать класс, где окно клонируется и отображается. Единственное, чего я добился, выскакивает единственное окошко, но каждый раз с новыми данными.
Есть DataGrid, количество записей в нем заранее не известно. Да, это роли и не играет.
При клике на строке DataGrid, должно открываться одно и тоже окно отображая данные из этой строки. И висеть, пока пользователь его не закроет. Один клик - одно окно. Десять кликов, - десять окон.
В принципе, речь идет не о десяти окнах, а о десяти экземплярах одного окна.
Как это сделать?
Пробовал написать класс, где окно клонируется и отображается. Единственное, чего я добился, выскакивает единственное окошко, но каждый раз с новыми данными.
Используй позднее связывание.
Короче, вот пример:
Есть форма F_1.
Чтобы её 100 раз вызвать, можно сделать так:
Set fff = New F_1
fff.show
Можно так:
Set fff = New F_1
fff.show
Можно так:
fff.show
А у тебя что в классе?
Извини, я вопрос не дочитал, потому так всё расписал, но, судя по твоему посту, ты знаешь, что делаешь. Скинь, где в классе экземпляр окна создаётся?
Ну как, получилось что-нибудь?:P
Ну как, получилось что-нибудь?:P
Да, получилось. От класса я отказался и использовал первый вариант. Но, все созданные формы я запихиваю в коллекцию. Каждая имеет свой индекс и по этому индексу я их закрываю.
Вот код:
Option Explicit
Private Sub Command1_Click()
Set f = New Form1
q = q + 1
f.Caption = "Form" & q
col.Add f
col(q).Show
End Sub
Private Sub Command2_Click()
Unload col(q)
q = q - 1
End Sub
Private Sub Form_Load()
If blFirst = False Then
q = 1
Form1.Caption = "Form" & q
Set col = New Collection
col.Add Form1
End If
blFirst = True
End Sub
Правда пришлось еще завести глобальный модуль потому, что каждая форма обнуляет переменную q.
Вот его код, ничего особенного:
Public col As Collection
Public f As Form
Public q As Integer
Public blFirst As Boolean
Каждый может это попробовать. Надо сделать форму и бросить на нее две кнопки.
PS Ужасно медленно работает форум. При том, у меня DSL и нахожусь я в Германии.
Да, получилось. От класса я отказался и использовал первый вариант. Но, все созданные формы я запихиваю в коллекцию. Каждая имеет свой индекс и по этому индексу я их закрываю.
Вот код:
Option Explicit
Private Sub Command1_Click()
Set f = New Form1
q = q + 1
f.Caption = "Form" & q
col.Add f
col(q).Show
End Sub
Private Sub Command2_Click()
Unload col(q)
q = q - 1
End Sub
Private Sub Form_Load()
If blFirst = False Then
q = 1
Form1.Caption = "Form" & q
Set col = New Collection
col.Add Form1
End If
blFirst = True
End Sub
Правда пришлось еще завести глобальный модуль потому, что каждая форма обнуляет переменную q.
Вот его код, ничего особенного:
Public col As Collection
Public f As Form
Public q As Integer
Public blFirst As Boolean
Каждый может это попробовать. Надо сделать форму и бросить на нее две кнопки.
PS Ужасно медленно работает форум. При том, у меня DSL и нахожусь я в Германии.
Я формы выгружаю примерно так:
'МАХ выгружаем все формы
For Each Frm In Forms
If Frm.Name <> Me.Name And Not (Frm Is Nothing) Then
Unload Frm
End If
Next
В Access в этом смысле еще веселей, там нет такого объекта-класса как Form. Все формы в Access являются своеобразными классами, которые в отличии от станд. класса вместо Init/Termin имеют Load/UnLoad и каждая форма создает свой класс под названием Form_ИмяФормы. Т.е. писать надо так:
Dim fr1 as Form_Главная, fr2 as Form_Главная
Set fr1 = New Form_Главная
Set fr2 = New Form_Главная
получим два экземпляра нашей главной формы под названием "Главная"
Работа с несколькими экземплярами одной формы часто практикуется в Access. Например в справочнике ты можешь открыть несколько окон с доп. инфой об объекте, зачем же ограничивать человека, если он хочет смотреть сразу несколько окон - форма естественно одна, тока информация в каждом экземпляре своя.
В Access в этом смысле еще веселей, там нет такого объекта-класса как Form. Все формы в Access являются своеобразными классами, которые в отличии от станд. класса вместо Init/Termin имеют Load/UnLoad и каждая форма создает свой класс под названием Form_ИмяФормы. Т.е. писать надо так:
Dim fr1 as Form_Главная, fr2 as Form_Главная
Set fr1 = New Form_Главная
Set fr2 = New Form_Главная
получим два экземпляра нашей главной формы под названием "Главная"
Ну ничего себе! Я подозревал, что Access - вешь в себе, причём глюкавая, но так... Я обалдел!X)- ;) :devil: :roll: :o
Ну ничего себе! Я подозревал, что Access - вешь в себе, причём глюкавая, но так... Я обалдел!X)- ;) :devil: :roll: :o
Ну да, комплилляторы или вернее среда разработки (IDE) в Access несколько отличается от Exeсуд и Word, у даже разные dll используются при компилляции кода.
Поэтому в Microsoft принято такое обозначение сред разработок: VB (Visual Basic 6,5,4,3); VBA (в Excel, Worde, PowerPoint,..); VBE - в Access.
Т.е. считается что у Access используется VBE, в отличии от VBA для Word'а и Excel'я.
Я формы выгружаю примерно так:
'МАХ выгружаем все формы
For Each Frm In Forms
If Frm.Name <> Me.Name And Not (Frm Is Nothing) Then
Unload Frm
End If
Next
Так тут же все формы закроются кроме активной. А у меня закрывается только та, которую юзер выбирает.
Так тут же все формы закроются кроме активной. А у меня закрывается только та, которую юзер выбирает.
Не, с коллекцией - отличный и очень остроумный вариант... Мне он очень понравился. Но я как бы свой привёл.... В принципе, если использовать мой, то можно цепляться за какую-то метку на форме, дабы её именно выгрузить. И тогда можно обойтись без коллекций.
Ну да, комплилляторы или вернее среда разработки (IDE) в Access несколько отличается от Exeсуд и Word, у даже разные dll используются при компилляции кода.
Поэтому в Microsoft принято такое обозначение сред разработок: VB (Visual Basic 6,5,4,3); VBA (в Excel, Worde, PowerPoint,..); VBE - в Access.
Т.е. считается что у Access используется VBE, в отличии от VBA для Word'а и Excel'я.
Интересно. зачем такая избыточность - несколько разных языков с близким синтаксисом? Неужели братва БГ не могла придумать что-нибудь попроще?