Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Передать свой Type в/через Event / 13 сообщений из 13, страница 1 из 1
11.11.2018, 22:16
    #39731479
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать свой Type в/через Event
Господа, приветствую!

Создал свой Public Type в отдельном модуле.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
'параметры для передачи поклассу прослушки
Public Type AlterParams
    NameFrmWork As String       
    LineId As Long              
    TypeComm As Long            
    TypeWork As Long            
End Type


Использовал ранее класс, спасибо Predeclared, когда то давал мне как пример, только добавил свои параметры:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Public Event Alteration(ByVal MyFrm As String, ByVal TypeWork As Long, ByVal LineId As Long, ByVal TypeBtn As Long, ByVal ParentWin As Long)

'---------------------------------------------------------------------------------------
' Procedure : RaiseAlteration
' Purpose   : переброска параметров из событийной формы в слушающую
'---------------------------------------------------------------------------------------
Public Sub RaiseAlteration(ByVal MyFrm As String, ByVal TypeWork As Long, ByVal LineId As Long, ByVal TypeBtn As Long, ByVal ParentWin As Long)
    RaiseEvent Alteration(MyFrm, TypeWork, LineId, TypeBtn, ParentWin)
End Sub

'---------------------------------------------------------------------------------------
' Procedure : Instance
' Purpose   : поднятие класса и возврат ссылки на него в вызывающую форму
'---------------------------------------------------------------------------------------
Public Property Get Instance() As clsAlterationService
    Set Instance = Me
End Property

Хотел переделать...Вместо глухого набора параметров хотел впихнуть свой созданный тип.
Вариант
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Event Alteration(AlterParam As AlterParams)

'---------------------------------------------------------------------------------------
' Procedure : RaiseAlteration
' Purpose   : переброска параметров из событийной формы в слушающую
'---------------------------------------------------------------------------------------
Public Sub RaiseAlteration(AlterParam As AlterParams)
    RaiseEvent Alteration(AlterParam)  '-->бьет ошибку
End Sub

не прокатывает. В переводе
- Только определяемые пользователем типы, определенные в модулях общедоступных объектов, могут быть сопоставлены варианту или переданы функциям с поздней привязкой

При попытке объявить свой тип в классе с Private, приводит к другой ошибке:
- Частное перечисление и пользовательские типы не могут использоваться в качестве параметров или возвращаемых типов для открытых процедур, общих элементов данных или полей общих пользовательских типов.

Как можно использовать свой тип для передачи в параметре?
При этом из формы свой тип передается в класс без проблем..
...
Рейтинг: 0 / 0
12.11.2018, 06:33
    #39731515
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать свой Type в/через Event
Я обычно создаю класс для передачи параметров - содержит просто публичные свойства. И параметром передаю уже класс. А тип нельзя использовать, к сожалению.
...
Рейтинг: 0 / 0
12.11.2018, 12:59
    #39731677
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать свой Type в/через Event
MrShin,

Спасибо.
Хотел сделать немного универсальней, да не ожидал. что городить придется.
Нужно покурить это...
...
Рейтинг: 0 / 0
13.11.2018, 06:36
    #39732122
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать свой Type в/через Event
Игортанда не ожидал. что городить придется
Ну почему "городить"? Это нормальное решение. Единственное - дополнительный модуль появляется.
...
Рейтинг: 0 / 0
13.11.2018, 12:00
    #39732327
alecko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать свой Type в/через Event
Игортан,может в слушающей форме данные не поменяны?
т.е. там так сделано?
Код: vbnet
1.
2.
3.
4.
5.
Private withevents clModule as clsAlterationService

Private sub clModule_Alteration(AlterParam As AlterParams)
...
end sub
...
Рейтинг: 0 / 0
13.11.2018, 12:02
    #39732329
alecko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать свой Type в/через Event
массивы можно передать через Variant переменную, может свой тип тоже так удастся сделать?
...
Рейтинг: 0 / 0
13.11.2018, 12:27
    #39732351
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать свой Type в/через Event
public type надо делать в tlb, её присоединить через референсы в проект, тогда всё будет передаваться
...
Рейтинг: 0 / 0
13.11.2018, 13:29
    #39732403
ЦЦа
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать свой Type в/через Event
Konst_Onepublic type надо делать в tlb, её присоединить через референсы в проект, тогда всё будет передаваться
+1

Либо, чтобы не учить IDL/ODL (хотя, что там учить?), воспользоваЦЦа VB5/6 и сделать ActiveX DLL или EXE с нужным (>1) instancing-ом класса и Public-описанием UDT. Т. е. получить ту же type library, но не отдельно, а в ресурсе исполняемого модуля (те же яйЦЦа). Но, как и в случае с отдельным .tlb, нужна регистрация (с правами на запись в реестр для Vista и последующих) и подключение reference в VBA-проект.
...
Рейтинг: 0 / 0
13.11.2018, 13:33
    #39732406
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать свой Type в/через Event
aleckoмассивы можно передать через Variant переменную, может свой тип тоже так удастся сделать?Да, пробовал это, прочитав.
Загвоздка, что это не массив а тип.
Может что то там не дожал, но не получалось.
MrShinЯ обычно создаю класс для передачи параметров -
да, просидев n времени в гугле, другого варианта решения этого вопроса не нашел.
Не сильно хочется плодить классы.

очередной раз перебираю шаблонную бд, эволюция...
Если нужно будет в последствии передавать несколько своих типов опять классы плодить.
aleckoможет в слушающей форме данные не поменяны?
т.е. там так сделано?
Да. так и было...

оставил пока на десерт. Займусь, как все переберу.
...
Рейтинг: 0 / 0
13.11.2018, 15:51
    #39732520
alecko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать свой Type в/через Event
Игортан, можно в вызывающем классе создать public sub и передать уже type в качестве параметра
т.е. создаем в вызывающем классе Class1 процедуру

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
' Процедура создания класса, которое будет генерировать событие
set clsAlteration=new clsAlterationService
Set clsAlteration.Parent=me
'...
' создаем процедуру в которой будем обрабатывать событие
Public Sub RaiseAlteration(AlterParam As AlterParams)
    ...
End Sub


а в классе который слушаем
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private clour As Class1 

Public Property Set Parent(value As Class1)
Set clour = value
End Property

Private sub1()  
clour.RaiseAlteration AlterParam ' событие
end sub
...
Рейтинг: 0 / 0
13.11.2018, 16:15
    #39732543
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать свой Type в/через Event
alecko,

Спасибо, буду смотреть.

Konst_One и ЦЦа , спасибо за советы.
Правда я с трудом понимаю их,
больше представляю, что это может быть.
...
Рейтинг: 0 / 0
13.11.2018, 17:31
    #39732595
ЦЦа
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать свой Type в/через Event
Игортан,

в архиве проект (кхм) на VB6 и откомпилированная DLL. DLL зарегистрировать через regsvr32 (из-под учётной записи с правами на запись в реестр). В IDE VBA в меню References подключить IgortanLib. Теперь в своём проекте можно пользоваЦЦа public-типом [IgortanLib.]AlterParams, наслаждаясь началом понимания того, что сообщения об ошибках были неспроста, а что-то пытались до юзера донести...
(в сторону: правда, что они пытались донести именно в VBA, не умеющем в public creatable классы (в отличие от VB), остаёЦЦА за кадром).
...
Рейтинг: 0 / 0
13.11.2018, 17:34
    #39732596
Передать свой Type в/через Event
Игортан, у вас это событие поднимается из многих мест одновременно (почти) и асинхронно? Т.е. между заполнением экземпляра структуры и RaiseEvent Alteration, использующим именно этот экземпляр может влезть другая RaiseEvent Alteration с другими данными?
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Передать свой Type в/через Event / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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