Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вызов одного окна несколько раз

6.3K
18 февраля 2004 года
Noja
4 / / 18.02.2004
Есть DataGrid, количество записей в нем заранее не известно. Да, это роли и не играет.
При клике на строке DataGrid, должно открываться одно и тоже окно отображая данные из этой строки. И висеть, пока пользователь его не закроет. Один клик - одно окно. Десять кликов, - десять окон.
В принципе, речь идет не о десяти окнах, а о десяти экземплярах одного окна.
Как это сделать?
Пробовал написать класс, где окно клонируется и отображается. Единственное, чего я добился, выскакивает единственное окошко, но каждый раз с новыми данными.
266
18 февраля 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Noja
Есть DataGrid, количество записей в нем заранее не известно. Да, это роли и не играет.
При клике на строке DataGrid, должно открываться одно и тоже окно отображая данные из этой строки. И висеть, пока пользователь его не закроет. Один клик - одно окно. Десять кликов, - десять окон.
В принципе, речь идет не о десяти окнах, а о десяти экземплярах одного окна.
Как это сделать?
Пробовал написать класс, где окно клонируется и отображается. Единственное, чего я добился, выскакивает единственное окошко, но каждый раз с новыми данными.


Используй позднее связывание.
Короче, вот пример:
Есть форма F_1.
Чтобы её 100 раз вызвать, можно сделать так:

 
Код:
Dim FFF as form

    Set fff = New F_1
    fff.show

Можно так:
 
Код:
Dim FFF as object

    Set fff = New F_1
    fff.show

Можно так:
 
Код:
Dim FFF as New F_1

    fff.show

А у тебя что в классе?
Извини, я вопрос не дочитал, потому так всё расписал, но, судя по твоему посту, ты знаешь, что делаешь. Скинь, где в классе экземпляр окна создаётся?
266
18 февраля 2004 года
mhaturov
901 / / 23.10.2003
Ну как, получилось что-нибудь?:P
6.3K
19 февраля 2004 года
Noja
4 / / 18.02.2004
Цитата:
Originally posted by mhaturov
Ну как, получилось что-нибудь?:P


Цитата:
Originally posted by mhaturov
Ну как, получилось что-нибудь?: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 и нахожусь я в Германии.

266
19 февраля 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Noja


Да, получилось. От класса я отказался и использовал первый вариант. Но, все созданные формы я запихиваю в коллекцию. Каждая имеет свой индекс и по этому индексу я их закрываю.
Вот код:
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 и нахожусь я в Германии.


Я формы выгружаю примерно так:

 
Код:
Dim Frm As Form
  'МАХ выгружаем все формы
  For Each Frm In Forms
    If Frm.Name <> Me.Name And Not (Frm Is Nothing) Then
      Unload Frm
    End If
  Next
258
19 февраля 2004 года
SergeySV
1.5K / / 19.03.2003
Работа с несколькими экземплярами одной формы часто практикуется в Access. Например в справочнике ты можешь открыть несколько окон с доп. инфой об объекте, зачем же ограничивать человека, если он хочет смотреть сразу несколько окон - форма естественно одна, тока информация в каждом экземпляре своя.
В Access в этом смысле еще веселей, там нет такого объекта-класса как Form. Все формы в Access являются своеобразными классами, которые в отличии от станд. класса вместо Init/Termin имеют Load/UnLoad и каждая форма создает свой класс под названием Form_ИмяФормы. Т.е. писать надо так:

Dim fr1 as Form_Главная, fr2 as Form_Главная

Set fr1 = New Form_Главная
Set fr2 = New Form_Главная

получим два экземпляра нашей главной формы под названием "Главная"
266
19 февраля 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by SergeySV
Работа с несколькими экземплярами одной формы часто практикуется в 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

258
19 февраля 2004 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by mhaturov

Ну ничего себе! Я подозревал, что 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'я.

6.3K
19 февраля 2004 года
Noja
4 / / 18.02.2004
Цитата:
Originally posted by mhaturov

Я формы выгружаю примерно так:
 
Код:
Dim Frm As Form
  'МАХ выгружаем все формы
  For Each Frm In Forms
    If Frm.Name <> Me.Name And Not (Frm Is Nothing) Then
      Unload Frm
    End If
  Next



Так тут же все формы закроются кроме активной. А у меня закрывается только та, которую юзер выбирает.

266
19 февраля 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Noja


Так тут же все формы закроются кроме активной. А у меня закрывается только та, которую юзер выбирает.


Не, с коллекцией - отличный и очень остроумный вариант... Мне он очень понравился. Но я как бы свой привёл.... В принципе, если использовать мой, то можно цепляться за какую-то метку на форме, дабы её именно выгрузить. И тогда можно обойтись без коллекций.

266
19 февраля 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by SergeySV


Ну да, комплилляторы или вернее среда разработки (IDE) в Access несколько отличается от Exeсуд и Word, у даже разные dll используются при компилляции кода.
Поэтому в Microsoft принято такое обозначение сред разработок: VB (Visual Basic 6,5,4,3); VBA (в Excel, Worde, PowerPoint,..); VBE - в Access.

Т.е. считается что у Access используется VBE, в отличии от VBA для Word'а и Excel'я.


Интересно. зачем такая избыточность - несколько разных языков с близким синтаксисом? Неужели братва БГ не могла придумать что-нибудь попроще?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог