powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / запустить WithEvents на текстбокс без создания доп.коллекции в форме
10 сообщений из 10, страница 1 из 1
запустить WithEvents на текстбокс без создания доп.коллекции в форме
    #40042245
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет еще раз!

Подскажите пожалуйста, можно ли организовать 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
запустить WithEvents на текстбокс без создания доп.коллекции в форме
    #40042287
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если textbox один (два-три), то весь этот зоопарк с коллекцией оберток не нужен.
Просто описать процедуру обработки нужного события в бэк модуле формы,
даже подписываться не нужно отдельно, за нас это уже сделано.
...
Рейтинг: 0 / 0
запустить WithEvents на текстбокс без создания доп.коллекции в форме
    #40042295
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Predeclared
Если textbox один (два-три), то весь этот зоопарк с коллекцией оберток не нужен.
Просто описать процедуру обработки нужного события,
даже подписываться не нужно отдельно, за нас это уже сделано.


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

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

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


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

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

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



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

Код: c#
1.
мой_контрол = new КлассОбертка.мойМетодПодписки(мой_контрол);
...
Рейтинг: 0 / 0
запустить WithEvents на текстбокс без создания доп.коллекции в форме
    #40042313
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
запустить WithEvents на текстбокс без создания доп.коллекции в форме
    #40042317
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК,
бэк модуль формы:
Код: 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
запустить WithEvents на текстбокс без создания доп.коллекции в форме
    #40042318
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неудачное имечко применил свойству (Object) :)
...
Рейтинг: 0 / 0
запустить WithEvents на текстбокс без создания доп.коллекции в форме
    #40042329
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Predeclared
Неудачное имечко применил свойству (Object) :)


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

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


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