|
|
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
Имеется неизвестное количество форм, отображающих каждая свои данные. Управление ими одинаково и стандартизовано, и сделано через класс, в котором объявляется переменная: Код: vbnet 1. Фактическое создание формы происходит через: Код: vbnet 1. Писать руками Н-нное количество SELECT...CASE для каждой формы и не забывать добавлять туда новые или удалять не нужные нет никакого желания. Поэтому возникла мысль делать это налету: Код: vbnet 1. 2. 3. 4. Но конструкция: Set myForm = New FormName не является корректной и необходимо какое-то решение, чтобы создавать нужные формы не плодя SELECT...CASE или управляющий класс под каждую форму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 12:28 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
А нужно именно через New создавать многочисленные инстансы одной формы? Если так, то, боюсь, невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 12:36 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
Stanislav PИмеется неизвестное количество форм, отображающих каждая свои данные. Управление ими одинаково и стандартизовано, и сделано через класс, в котором объявляется переменная: Код: vbnet 1. Фактическое создание формы происходит через: Код: vbnet 1. Писать руками Н-нное количество SELECT...CASE для каждой формы и не забывать добавлять туда новые или удалять не нужные нет никакого желания. Поэтому возникла мысль делать это налету: Код: vbnet 1. 2. 3. 4. Но конструкция: Set myForm = New FormName не является корректной и необходимо какое-то решение, чтобы создавать нужные формы не плодя SELECT...CASE или управляющий класс под каждую форму. у формы есть свойство Tag туда и пиши свои Select а у формы на событие "Open" считывай свой Select. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 12:53 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
ROIтуда и пиши свои Select Имеется в виду, насколько я понимаю, не SQL select, а VBA Select Case для выбора какой именно класс использовать для создания инстанса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 12:58 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
MrShin, Eval не прокатит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 13:04 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
Stanislav P, Вот тут наткнулся на интересный вариант решения, можно попробовать. Только инстанс потом придется искать для получения управления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 13:04 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
Нет, это не одна форма, это разные формы, каждая со своей структурой и данными. Пример, чтобы было наглядно: - Контакт, Задача, Контрагент, Товар. Все формы отображают свои данные, управление каждой формой идёт из одного класса: открыть, закрыть, сохранить данные из формы, загрузить данные в форму. Создаваемое приложение является MDI (юзер может открыть несколько окон одного типа с разными данными или нескольких типов и работать поочередно в каждом). Создание переменной для формы происходит внутри этого класса. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. Соответственно, для каждой формы со разными данными создаётся своя переменная управляющего класса: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 13:08 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
Benny BlancoEval не прокатит? Нет, такой фокус не пройдет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 13:10 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
Stanislav Pюзер может открыть несколько окон одного типа Да, именно это я имел в виду под инстансами одной формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 13:13 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
Benny Blanco, Можно через VBE сделать. При запуске апликуха будет брать из таблицы список всех форм и через VBE генерить класс со свойствами, возвращающими new xForm1..new xFormN. CallByName этих свойств сэмулирует подобие eval. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 13:15 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
Stanislav PИмеется неизвестное количество форм, отображающих каждая свои данные. Вы не объяснили, это разные формы или разные экземпляры одной формы. Если формы разные, то что мешает открыть нужную форму методом DoCmd.OpenForm FormName, а затем Set myForm = Forms(FormName). На Terminate класса закрывать форму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 13:17 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
ContactItem можно объявить как Form, а инстанс создавать уже конкретного класса, тут уже по Select Case или попробовать вариант с SelectObject из ответа по ссылке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 13:17 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
Stanislav P, Создайте свой класс коллекция и "пихайте" туда ну и читайте (Гетц так советует) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 13:32 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
ROIСоздайте свой класс коллекция и "пихайте" туда Так прежде чем пихать, нужно создать форму по имени, этом проблема. Попробовал DoCmd.SelectObject <acObjectType>, <YourObjectsName>, True DoCmd.RunCommand acCmdNewObjectForm Не работает - ошибка NewObjectForm недоступно :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 13:45 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
Кривцов АнатолийЕсли формы разные, то что мешает открыть нужную форму методом DoCmd.OpenForm FormName, а затем Set myForm = Forms(FormName). На Terminate класса закрывать форму. Формы разные (Контакт, Задача, Товар) пользователь может открыть несколько форм с контактами, каждая такая форма будет содержать свои данные (Петрова, Иванов, Боль-буль оглы). То же самое и с формой для товара. В VBA формы можно открыть через Docmd.OpenForm, но тогда это будет только одна форма с контактом, другую уже не откроешь. Можно формы открыть через: Код: vbnet 1. 2. В этом случае можно открывать сколько хочешь форм одного типа, но с разными данными, вопрос хранения таких форм оставим за рамками обсуждения. Писать для каждого типа, что такое: Set myForm = New Form_XXXTypeItem когда у тебя таких типов с десяток очень не хочется, потому что это нудно и при появлении новой типа формы или удалении старого, придётся переписывать код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 14:21 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
Stanislav P... Писать для каждого типа, что такое: Set myForm = New Form_XXXTypeItem когда у тебя таких типов с десяток очень не хочется, ... Для других (не форм) описаний классов хочется, а для форм не хочется? За что вы их (описания форм) так не любите? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 14:35 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
Stanislav Pкогда у тебя таких типов с десяток Ну десяток это не так много, ничего страшного, если будет 20 строк select case в одном месте. Да и при добавлении новой формы зарегистрировать ее в классе инициализации секундное дело. В общем, коряво, конечно, но у VBA свои недостатки, я не вижу реальных способов обойтись без select case ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 14:38 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
MrShin... я не вижу реальных способов обойтись без select case Мне известен один изворот, но с select case значительно проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 14:41 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
PredeclaredМне известен один изворот Какой? Интересно в академических целях :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 14:43 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
На этом форуме предлагали, ссылку сейчас не нашел. Если вкратце: В описании бэк модуля каждой формы добавляется свойство, возвращающее New Instans этого описания. При необходимости получить New Instans по имени формы, штатным docmd поднимается стандартный экземляр, считываем значение добавленного свойства в ссылочку и стандартный экземляр закрываем штатным docmd. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 14:54 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
MrShinНу десяток это не так много, ничего страшного, если будет 20 строк select case в одном месте. Да и при добавлении новой формы зарегистрировать ее в классе инициализации секундное дело. В общем, коряво, конечно, но у VBA свои недостатки, я не вижу реальных способов обойтись без select case Когда дошёл до десятка, то решил найти способ отличный от select...case. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 15:01 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
Всё украдено до нас: Создание экземпляра формы . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 15:02 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
Stanislav P, Разработка настольных приложений в Access 2002.Для профессионалов.Литвин.Гетц.2002г. т.01 стр. 447 "...Если вы собираетесь работать с несколькими экземплярами формы... ...способом может быть хранение ссылок на объекты формы в пользовательской коллекции..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 15:04 |
|
||
|
Создание на лету переменной класса формы с типом взятым из значение другой переменной
|
|||
|---|---|---|---|
|
#18+
ROIStanislav P, Разработка настольных приложений в Access 2002.Для профессионалов.Литвин.Гетц.2002г. т.01 стр. 447 "...Если вы собираетесь работать с несколькими экземплярами формы... ...способом может быть хранение ссылок на объекты формы в пользовательской коллекции..." :) Это у них ещё для Access 2000 написано и с хранением проблем нет. Проблема в создании без select...case. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2019, 15:09 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=39774519&tid=1610838]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
182ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 523ms |

| 0 / 0 |
