powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Один обработчик событий на несколько объектов формы
12 сообщений из 12, страница 1 из 1
Один обработчик событий на несколько объектов формы
    #39458603
mr. Shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

В наличии форма с 60+ полями. Необходимо при клике по полю запускать определенную процедуру. Т.к. полей много — от создания обработки события к каждому полю отказался сразу. Ибо это бред. Два дня гугления привели к следующему коду:

Класс TextboxHandler
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Option Explicit

Public WithEvents tbx As TextBox

Private Sub tbx_Click()
   MsgBox "You clicked textbox: " & tbx.Name
End Sub



Код формы
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Option Explicit

Dim Coll As Collection

Private Sub Form_Load()
    Dim oh As TextboxHandler
    Dim ctl As Control
    Set Coll = New Collection
       
    For Each ctl In Form.Controls
        With ctl
            Select Case .ControlType
            Case acTextBox
                Set oh = New TextboxHandler
                Set oh.tbx = ctl
                Coll.Add oh
            End Select
        End With
    Next ctl
End Sub



Т.е., как я понял, мы бежим по контролам на форме, и полям присваиваем обработчик события. После этого обработчик добавляется в коллекцию.

Ожидаемо ничего не работает :)

Может быть у кого-нибудь найдется желание доступно объяснить, что я делаю не так. Или хотя бы, что можно почитать по данной теме чтобы разобраться самому?
...
Рейтинг: 0 / 0
Один обработчик событий на несколько объектов формы
    #39458608
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Присвоить значение свойству OnClick полей забыли.
[Event Procedure]
...
Рейтинг: 0 / 0
Один обработчик событий на несколько объектов формы
    #39458613
mr. Shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Predeclared, Спасибо вам огромное! Как, оказывается, я был близок
...
Рейтинг: 0 / 0
Один обработчик событий на несколько объектов формы
    #39458623
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr. ShuВ наличии форма с 60+ полями. Необходимо при клике по полю запускать определенную процедуру. Т.к. полей много — от создания обработки события к каждому полю отказался сразу. Ибо это бред.Почему бред? Уверены?
Процедура одна и та же?
Создайте Public Function ИмяФункции() в модуле формы.
Для всех полей укажите Событие Нажатие кнопки =ИмяФункции().
...
Рейтинг: 0 / 0
Один обработчик событий на несколько объектов формы
    #39458627
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, еще.
Вдруг не догадаетесь.
Указывайте =ИмяФункции() не для каждого поля отдельно (за 60 операций),
а выделите их все сразу и присвойте значение всем сразу (за одну операцию).
...
Рейтинг: 0 / 0
Один обработчик событий на несколько объектов формы
    #39458642
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поддержу __Michelle, это проще, чем класс, их и отлаживать сложнее. В функции конкретное поле определяется через Me.ActiveControl
...
Рейтинг: 0 / 0
Один обработчик событий на несколько объектов формы
    #39458645
mr. Shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__MichelleПочему бред? Уверены?
Процедура одна и та же?
Процедура одна и та же. Один из параметров это имя поля, а второй глобальная переменная

__MichelleСоздайте Public Function ИмяФункции() в модуле формы.
Для всех полей укажите Событие Нажатие кнопки =ИмяФункции().
В этом случае в редакторе не отобразится для каждого поля код типа:
Код: vbnet
1.
2.
3.
Private Sub Ctl63_Click()
     Call SomeFunction(arg)
End Sub

?
Если нет, то спасибо за второй способ

__MichelleДа, еще.
Вдруг не догадаетесь.
Указывайте =ИмяФункции() не для каждого поля отдельно (за 60 операций),
а выделите их все сразу и присвойте значение всем сразу (за одну операцию).
До этого догадался сразу, когда [Event Procedure] присваивал. Спасибо
...
Рейтинг: 0 / 0
Один обработчик событий на несколько объектов формы
    #39458648
mr. Shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShinПоддержу __Michelle, это проще, чем класс, их и отлаживать сложнее. В функции конкретное поле определяется через Me.ActiveControl
Благодарю.

А вот интересно, какой способ выигрышнее в плане производительно?
...
Рейтинг: 0 / 0
Один обработчик событий на несколько объектов формы
    #39458683
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShinПоддержу __Michelle, это проще, чем класс, их и отлаживать сложнее. В функции конкретное поле определяется через Me.ActiveControl

Почему сложнее? Все так же просто. И даже несколько удобней, так как все в одном месте.
...
Рейтинг: 0 / 0
Один обработчик событий на несколько объектов формы
    #39458704
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrFПочему сложнее? Все так же просто. И даже несколько удобней, так как все в одном месте.
Код-то один, да вот у вас будет 60 экземпляров класса в коллекции, в которые вы будете попадать через события. Если класс будет посложнее и будет обрабатываться несколько событий, да еще в нескольких окнах, найти причину ошибки иногда бывает довольно сложно. Я довольно часто использую подобную технику с классами, но стараюсь обойтись без нее, если появляется возможность именно из-за проблем с отладкой.
...
Рейтинг: 0 / 0
Один обработчик событий на несколько объектов формы
    #39458880
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShinЯ довольно часто использую подобную технику с классами, но стараюсь обойтись без нее, если появляется возможность именно из-за проблем с отладкой.

Я подобную организацию применял еще работая с VB6. Получилось довольно удачно - никаких проблем с отладкой не было.

Есть основной класс (типа класса формы) в который добавляются классы контролов. Основной класс ведет всю рутинную обработку - типа того как это делает форма Access, проверяя поля на валидность и выдавая сообщения. Естественно у него есть и события - BeforeUpdate, AfterUpdate и прочее нужное.

Получилось очень удачно, ну и в результате код типовых форм в VB6 очень сильно упростился...

Ну а сами классы надо отладить, но это один раз...

------------------------

По теме топика - как я понял его автору надо было всего лишь походим образом обработать 60 полей. Нагораживать только из за этого вряд ли стоит - подойдет любой вариант из приведенных выше.
...
Рейтинг: 0 / 0
Один обработчик событий на несколько объектов формы
    #39458946
mr. Shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndrFПо теме топика - как я понял его автору надо было всего лишь походим образом обработать 60 полей. Нагораживать только из за этого вряд ли стоит - подойдет любой вариант из приведенных выше.
У меня заработали оба варианта, но в итоге я остановился на варианте предложенном __Michelle. Я честно говоря не подумал, о самом простом варианте и сразу начал усложнять. Зато узнал много нового. Спасибо всем кто уделил мне время!
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Один обработчик событий на несколько объектов формы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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