powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Передать свой Type в/через Event
13 сообщений из 13, страница 1 из 1
Передать свой Type в/через Event
    #39731479
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, приветствую!

Создал свой 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
Передать свой Type в/через Event
    #39731515
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я обычно создаю класс для передачи параметров - содержит просто публичные свойства. И параметром передаю уже класс. А тип нельзя использовать, к сожалению.
...
Рейтинг: 0 / 0
Передать свой Type в/через Event
    #39731677
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShin,

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

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

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

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

оставил пока на десерт. Займусь, как все переберу.
...
Рейтинг: 0 / 0
Передать свой Type в/через Event
    #39732520
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан, можно в вызывающем классе создать 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
Передать свой Type в/через Event
    #39732543
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko,

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

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

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


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