powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание на лету переменной класса формы с типом взятым из значение другой переменной
25 сообщений из 28, страница 1 из 2
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774383
Stanislav P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется неизвестное количество форм, отображающих каждая свои данные. Управление ими одинаково и стандартизовано, и сделано через класс, в котором объявляется переменная:
Код: vbnet
1.
Private WithEvents myForm As Form


Фактическое создание формы происходит через:
Код: vbnet
1.
Set myForm = New Form_Someform1


Писать руками Н-нное количество SELECT...CASE для каждой формы и не забывать добавлять туда новые или удалять не нужные нет никакого желания.
Поэтому возникла мысль делать это налету:
Код: vbnet
1.
2.
3.
4.
Private WithEvents myForm As Form
Public Sub ClassInit(FormName As Sting)
Set myForm = New FormName
End Sub


Но конструкция: Set myForm = New FormName не является корректной и необходимо какое-то решение, чтобы создавать нужные формы не плодя SELECT...CASE или управляющий класс под каждую форму.
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774389
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нужно именно через New создавать многочисленные инстансы одной формы? Если так, то, боюсь, невозможно.
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774405
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav PИмеется неизвестное количество форм, отображающих каждая свои данные. Управление ими одинаково и стандартизовано, и сделано через класс, в котором объявляется переменная:
Код: vbnet
1.
Private WithEvents myForm As Form



Фактическое создание формы происходит через:
Код: vbnet
1.
Set myForm = New Form_Someform1



Писать руками Н-нное количество SELECT...CASE для каждой формы и не забывать добавлять туда новые или удалять не нужные нет никакого желания.
Поэтому возникла мысль делать это налету:
Код: vbnet
1.
2.
3.
4.
Private WithEvents myForm As Form
Public Sub ClassInit(FormName As Sting)
Set myForm = New FormName
End Sub



Но конструкция: Set myForm = New FormName не является корректной и необходимо какое-то решение, чтобы создавать нужные формы не плодя SELECT...CASE или управляющий класс под каждую форму.
у формы есть свойство Tag
туда и пиши свои Select
а у формы на событие "Open" считывай свой Select.
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774409
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROIтуда и пиши свои Select
Имеется в виду, насколько я понимаю, не SQL select, а VBA Select Case для выбора какой именно класс использовать для создания инстанса
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774414
Benny Blanco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShin,

Eval не прокатит?
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774416
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav P,

Вот тут наткнулся на интересный вариант решения, можно попробовать. Только инстанс потом придется искать для получения управления.
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774423
Stanislav P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, это не одна форма, это разные формы, каждая со своей структурой и данными. Пример, чтобы было наглядно: - Контакт, Задача, Контрагент, Товар. Все формы отображают свои данные, управление каждой формой идёт из одного класса: открыть, закрыть, сохранить данные из формы, загрузить данные в форму.
Создаваемое приложение является MDI (юзер может открыть несколько окон одного типа с разными данными или нескольких типов и работать поочередно в каждом).
Создание переменной для формы происходит внутри этого класса.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
'Управляющий класс FormControl
Private WithEvents myForm As Form
Public Sub ClassInit(Type As String)
'Здесь надо реализовать создание формы нужного типа без кучи SELECT...CASE.
End Sub
Public Sub ShowForm()
myform.Show()
End Sub


Соответственно, для каждой формы со разными данными создаётся своя переменная управляющего класса:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
'Где-то в модулях
'Процедура создаёт очередное окно 
Sub CreateItem()
 Dim ContactItem As FormControl
 Set ContactItem = New FormControl 
 ContactItem.Init(ContactType)
 ContactItem.LoadData()
 ContactItem.Show
End Sub
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774426
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Benny BlancoEval не прокатит?
Нет, такой фокус не пройдет
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774431
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Pюзер может открыть несколько окон одного типа
Да, именно это я имел в виду под инстансами одной формы.
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774437
Benny Blanco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Benny Blanco,

Можно через VBE сделать. При запуске апликуха будет брать из таблицы список всех форм и через VBE генерить класс со свойствами, возвращающими new xForm1..new xFormN.
CallByName этих свойств сэмулирует подобие eval.
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774439
Stanislav PИмеется неизвестное количество форм, отображающих каждая свои данные. Вы не объяснили, это разные формы или разные экземпляры одной формы.
Если формы разные, то что мешает открыть нужную форму методом DoCmd.OpenForm FormName, а затем Set myForm = Forms(FormName).
На Terminate класса закрывать форму.
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774440
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ContactItem можно объявить как Form, а инстанс создавать уже конкретного класса, тут уже по Select Case или попробовать вариант с SelectObject из ответа по ссылке
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774454
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav P,

Создайте свой класс коллекция и "пихайте" туда
ну и читайте (Гетц так советует)
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774465
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROIСоздайте свой класс коллекция и "пихайте" туда
Так прежде чем пихать, нужно создать форму по имени, этом проблема.

Попробовал
DoCmd.SelectObject <acObjectType>, <YourObjectsName>, True
DoCmd.RunCommand acCmdNewObjectForm

Не работает - ошибка NewObjectForm недоступно :(
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774497
Stanislav P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов АнатолийЕсли формы разные, то что мешает открыть нужную форму методом DoCmd.OpenForm FormName, а затем Set myForm = Forms(FormName).
На Terminate класса закрывать форму.
Формы разные (Контакт, Задача, Товар) пользователь может открыть несколько форм с контактами, каждая такая форма будет содержать свои данные (Петрова, Иванов, Боль-буль оглы). То же самое и с формой для товара.
В VBA формы можно открыть через Docmd.OpenForm, но тогда это будет только одна форма с контактом, другую уже не откроешь.
Можно формы открыть через:
Код: vbnet
1.
2.
Dim myForm As Form_ContactForm
Set myForm = New Form_ContactForm


В этом случае можно открывать сколько хочешь форм одного типа, но с разными данными, вопрос хранения таких форм оставим за рамками обсуждения.
Писать для каждого типа, что такое: Set myForm = New Form_XXXTypeItem когда у тебя таких типов с десяток очень не хочется, потому что это нудно и при появлении новой типа формы или удалении старого, придётся переписывать код.
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774517
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav P... Писать для каждого типа, что такое: Set myForm = New Form_XXXTypeItem когда у тебя таких типов с десяток очень не хочется, ...
Для других (не форм) описаний классов хочется, а для форм не хочется?
За что вы их (описания форм) так не любите? :)
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774519
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Pкогда у тебя таких типов с десяток
Ну десяток это не так много, ничего страшного, если будет 20 строк select case в одном месте. Да и при добавлении новой формы зарегистрировать ее в классе инициализации секундное дело.

В общем, коряво, конечно, но у VBA свои недостатки, я не вижу реальных способов обойтись без select case
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774522
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShin... я не вижу реальных способов обойтись без select case
Мне известен один изворот, но с select case значительно проще.
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774523
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PredeclaredМне известен один изворот
Какой? Интересно в академических целях :)
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774533
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На этом форуме предлагали, ссылку сейчас не нашел.
Если вкратце:
В описании бэк модуля каждой формы добавляется свойство, возвращающее New Instans этого описания.
При необходимости получить New Instans по имени формы, штатным docmd поднимается стандартный экземляр,
считываем значение добавленного свойства в ссылочку и стандартный экземляр закрываем штатным docmd.
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774544
Stanislav P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShinНу десяток это не так много, ничего страшного, если будет 20 строк select case в одном месте. Да и при добавлении новой формы зарегистрировать ее в классе инициализации секундное дело.

В общем, коряво, конечно, но у VBA свои недостатки, я не вижу реальных способов обойтись без select case
Когда дошёл до десятка, то решил найти способ отличный от select...case. :)
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774545
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё украдено до нас: Создание экземпляра формы .
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774549
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav P,
Разработка настольных приложений в Access 2002.Для профессионалов.Литвин.Гетц.2002г. т.01
стр. 447
"...Если вы собираетесь работать с несколькими экземплярами формы...
...способом может быть хранение ссылок на объекты формы в пользовательской коллекции..."
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774555
Stanislav P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROIStanislav P,
Разработка настольных приложений в Access 2002.Для профессионалов.Литвин.Гетц.2002г. т.01
стр. 447
"...Если вы собираетесь работать с несколькими экземплярами формы...
...способом может быть хранение ссылок на объекты формы в пользовательской коллекции..."
:)
Это у них ещё для Access 2000 написано и с хранением проблем нет. Проблема в создании без select...case.
...
Рейтинг: 0 / 0
Создание на лету переменной класса формы с типом взятым из значение другой переменной
    #39774567
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо в MzTools отписаться, чтобы они опцию автоматизации варианта с Select Case в свой солюшн добавили.
:)
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание на лету переменной класса формы с типом взятым из значение другой переменной
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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