Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / обработчик событий формы/контрола / 7 сообщений из 7, страница 1 из 1
24.01.2016, 05:46
    #39153834
v-e-t
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработчик событий формы/контрола
Доброго дня!
Мне необходимо в рантайме разным контролам и формам назначить идентичный обработчик события - некоторую пользовательскую функцию ОБРАБОТКА, определенную в общем модуле. Например, назначить ее событию OnMouseDown. С назначением обработчика в VBA нет вопросов: ="=ОБРАБОТКА()", но как передать параметры стандартного обработчика, которые есть в модуле формы при использовании "[event procedure]" - MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single).
Вопрос - как значения этих параметров передать в мою функцию ОБРАБОТКА(Button As Integer, Shift As Integer, X As Single, Y As Single)?

спасибо.
...
Рейтинг: 0 / 0
24.01.2016, 06:42
    #39153838
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработчик событий формы/контрола
v-e-t,

Прямо внутри события и вызывайте свою функцию / процедуру и заодно передавайте значение параметров.
Код: vbnet
1.
2.
3.
Private Sub Поле0_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    ОБРАБОТКА Button, Shift, X, Y
End Sub
...
Рейтинг: 0 / 0
24.01.2016, 15:12
    #39153942
v-e-t
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработчик событий формы/контрола
studierenv-e-t,

Прямо внутри события и вызывайте свою функцию / процедуру и заодно передавайте значение параметров.
Код: vbnet
1.
2.
3.
Private Sub Поле0_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    ОБРАБОТКА Button, Shift, X, Y
End Sub



Вопрос именно в том, чтобы не писать в модуле формы вообще ничего, а в режиме рантайм назначить обработчик в виде готовой функции потому, что форм будет много (например 30), и при чего-либо в функции я не хочу править все 30 форм.
...
Рейтинг: 0 / 0
24.01.2016, 16:39
    #39153973
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработчик событий формы/контрола
v-e-t... Вопрос именно в том, чтобы не писать в модуле формы вообще ничего...
Тогда никак.

v-e-t... форм будет много (например 30), и при чего-либо в функции я не хочу править все 30 форм.
Можно для каждого типа формы/контрола описать класс-обертку, где подписываться на события,
описывать процедуры обработки событий, и в них реализовывать нужный "стандартизированный" функционал.
...
Рейтинг: 0 / 0
24.01.2016, 18:31
    #39154022
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработчик событий формы/контрола
Пример лайт:
для формы - бэк колор области данных при активации/деактивации
для кнопок - клик и форе колор на получение/потерю фокуса
для текстбоксов - мышка вниз, мышка вверх.
...
Рейтинг: 0 / 0
25.01.2016, 07:59
    #39154224
v-e-t
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработчик событий формы/контрола
Predeclared,
На счет своих классов и инстансов форм я знаю. Интересует решение именно в постановке вопроса, но все равно спасибо.
...
Рейтинг: 0 / 0
27.01.2016, 01:41
    #39156169
Вакшуль Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработчик событий формы/контрола
v-e-t, добрый день.

Собственно, Predeclared уже все сказал, я лишь добавлю, пару слов. Может вам пригодится.
К параметрам, которые вас интересуют (Button As Integer, Shift As Integer, X As Single, Y As Single), можно получить доступ только из модуля формы. Делегаты тут не используешь. Писать код в каждой форме вас не устраивает, значит, как сказал Predeclared, на эти события нужно подписаться откуда-нибудь. Причем это должен быть только модуль класса.
Собственно я и хотел предложить вариант.
Вот тут я выкладывал файл:
http://am.rusimport.ru/MsAccess/topic.aspx?ID=782
Тема другая, но там есть фрагмент, который можно приспособить для вашей задачи.

Вы хотите в одном месте разместить код, который будут использовать разные формы/отчеты и их контролы. Т.е. нужен класс.

в примере, что я дал, одна из подсистем это своеобразный Диспетчер уровня приложения, который следит за происходящим: Открытие/Закрытие/Активация/Декативация форм/отчетов в приложении(Диспетчер представлен двумя классами и одним интерфейсом) и генерирует соответствующие события.

Так вот. По вашей задаче. Как я сказал, вам нужен класс, где вы разместите свой код на все случаи жизни.
В моем примере таким классом был модуль формы F_Start. В этом классе, создается объектная переменная типа Диспетчера.
Это вам дает доступ ко событиям Диспетчера. А события эти:
Event AfterOpenFR(FR_Object As Object)
Event ActivationFR(FR_Object As Object, blnAfterOpen As Boolean)
Event DeactivateFR(FR_Object As Object, intReasonDeact As ReasonDeact, NewFR As Object, FR_IsBeingActivated As Object)
Event CloseFR(FR_Object As Object)

Т.е. вы получаете возможность прослушивать из одного места события Открытие(суррогат этого события)/Закрытие/Активация/Декативация всех форм/отчетов. Непосредственная дальнейшая организация - это уже ваше творчество, как построите.

у Диспетчера есть ряд ограничений. Они описаны в файле: формы не должны быть всплывающие или быть открыты как acDialog, а также все они должны иметь модуль.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / обработчик событий формы/контрола / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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