Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / запустить WithEvents на текстбокс без создания доп.коллекции в форме / 10 сообщений из 10, страница 1 из 1
05.02.2021, 16:54
    #40042245
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запустить WithEvents на текстбокс без создания доп.коллекции в форме
Привет еще раз!

Подскажите пожалуйста, можно ли организовать WithEvents с текстбоксом таким образом, чтобы не создавать дополнительную коллекцию в форме и не пихать в нее event?

К примеру:
Я создал класс MyEvents для обработки события текстбокса
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private WithEvents txt As Access.TextBox
Public Property Set setTextbox(txt_main As Access.TextBox)
    Set txt = txt_main
    txt.OnChange = "[Event Procedure]"
End Property

Private Sub txt_Change()
MsgBox "Вы запустили событие текстбокса -изменение. "
End Sub

Private Sub Class_Terminate()
    Set txt = Nothing
End Sub




Потом я соответственно его иницициализирую в модуле формы:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Option Compare Database
Public ctrl As New Collection

Private Sub Form_Open(Cancel As Integer)
Dim listenEvents As MyEvents
    Set listenEvents = New MyEvents
        Set listenEvents.setTextbox = Me.fld_text
ctrl.Add listenEvents
End Sub



Можно ли избавиться от обьявления коллекции в модуле формы и запихивания инстанса класса в неё в процедуре?
...
Рейтинг: 0 / 0
05.02.2021, 18:21
    #40042287
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запустить WithEvents на текстбокс без создания доп.коллекции в форме
Если textbox один (два-три), то весь этот зоопарк с коллекцией оберток не нужен.
Просто описать процедуру обработки нужного события в бэк модуле формы,
даже подписываться не нужно отдельно, за нас это уже сделано.
...
Рейтинг: 0 / 0
05.02.2021, 18:29
    #40042295
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запустить WithEvents на текстбокс без создания доп.коллекции в форме
Predeclared
Если textbox один (два-три), то весь этот зоопарк с коллекцией оберток не нужен.
Просто описать процедуру обработки нужного события,
даже подписываться не нужно отдельно, за нас это уже сделано.


Я понимаю, но вопрос принципиальный , тут больше вопрос такой - как создать нормальную автономную класс обертку. Сама в себе чтобы была.

Теоретически- можно без коллекции, потому что у нас есть активный модуль прототип формы и соотвественно можно на него накинуть event, без добавления в коллекцию. Только как это сделать что то не понимаю.
...
Рейтинг: 0 / 0
05.02.2021, 18:34
    #40042297
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запустить WithEvents на текстбокс без создания доп.коллекции в форме
Сергей Лалов
...- как создать нормальную автономную класс обертку. Сама в себе чтобы была...

Вот это не понял.
...
Рейтинг: 0 / 0
05.02.2021, 18:43
    #40042303
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запустить WithEvents на текстбокс без создания доп.коллекции в форме
Может метод Мюнхгаузена имеется в виду?
...
Рейтинг: 0 / 0
05.02.2021, 18:50
    #40042306
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запустить WithEvents на текстбокс без создания доп.коллекции в форме
Predeclared
Может метод Мюнхгаузена имеется в виду?


Сам себя за волосы?) Да, очень точный комментарий.

вот к примеру в C# реализация подписки контрола на событие (ну к примеру создал класс обертку и хочу накинуть на какой то контрол) происходит по желанию так (способов много , но просто как вариант хочу показать):

Код: c#
1.
мой_контрол = new КлассОбертка (мой_контрол);



Ну или если быть ближе к VBA (в VBA к сожалению нельзя создать конструктор класса с параметрами в сигнатуре)

Код: c#
1.
мой_контрол = new КлассОбертка.мойМетодПодписки(мой_контрол);
...
Рейтинг: 0 / 0
05.02.2021, 19:00
    #40042313
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запустить WithEvents на текстбокс без создания доп.коллекции в форме
Predeclared
Сергей Лалов
...- как создать нормальную автономную класс обертку. Сама в себе чтобы была...

Вот это не понял.


Да в общем то все просто, чтобы вызов WithEvent в форме к примеру был более лаконичный, вот такой, без всяких коллекций в модуле формы :

Код: vbnet
1.
2.
3.
4.
Private Sub Form_Open(Cancel As Integer)
Dim listenEvents As New MyEvents
        Set listenEvents.setTextbox = Me.fld_text
End Sub
...
Рейтинг: 0 / 0
05.02.2021, 19:05
    #40042317
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запустить WithEvents на текстбокс без создания доп.коллекции в форме
ОК,
бэк модуль формы:
Код: vbnet
1.
2.
3.
4.
5.
Private Sub Form_Open(Cancel As Integer)
    With New clsTextbox
        Set .Object = Me.tbx1
    End With
End Sub



Описание обертки clsTextbox:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Private WithEvents tbx As Access.TextBox
Private WithEvents frm As Access.Form
Private Iam As Object

Private Sub frm_Close()
    Set frm = Nothing
    Set tbx = Nothing
    Set Iam = Nothing
End Sub

Private Sub tbx_Change()
    MsgBox "Change"
End Sub

Public Property Set Object(ByRef txt As Access.TextBox)
    Const EP As String = "[Event Procedure]"
    Set tbx = txt
    tbx.OnChange = EP
    Set frm = txt.Parent 'здесь рекурсивно проверять до нахождения Form, потому как может быть на вкладке!!!
    frm.OnClose = EP
    Set Iam = Me
End Property
...
Рейтинг: 0 / 0
05.02.2021, 19:07
    #40042318
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запустить WithEvents на текстбокс без создания доп.коллекции в форме
Неудачное имечко применил свойству (Object) :)
...
Рейтинг: 0 / 0
05.02.2021, 19:29
    #40042329
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запустить WithEvents на текстбокс без создания доп.коллекции в форме
Predeclared
Неудачное имечко применил свойству (Object) :)


Благодарю! Все завелось и работает! Ну форма то объект, почему бы не назвать свойство системным именем Object
и задать переменную выше as Object Более таинственно, чтобы враги не поняли))

Я кстати не знал, что так можно связать в одном модуле контрол с текущей формой.
Для пущей таинственности и запутанности и интриги можно добавить:
Set Iam = Me ' где Me это значение объекта текущего экземпляра класса типа форма ))
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / запустить WithEvents на текстбокс без создания доп.коллекции в форме / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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