Как код связывается с событиями

Все дело в имени — в имени процедуры. Когда вы открываетеформу, в которой есть соответствующий программный код, программа Access ищет процедуры с определенными именами.

Если она находит процедуру, названную MyButton Click, то, прежде всего, проверяет элемент управления с именем MyButtonи наличие у него события с именем Click (нажатие кнопки). Если обе детали обнаружены, эта программная процедура становится обработчиком данного события, что на своеобразном жаргоне программистов означает связывание вашего кода с событием. Когда возникает событие (например, когда кнопку щелкнули мышью), Access выполняет код из вашей процедуры.

Если программа Access находит процедуру, названную MyButton_Click, а на форме нет элемента управления с именем MyButton,не стоит паниковать. Access просто предполагает, что вы создали процедуру для собственных внутренних нужд. Поскольку эта процедура не является обработчиком события, программа Access не запускает ее автоматически в ответ на возникновение события.

Но она все же при необходимости может обращаться к вашему коду, как описано на этой странице.

У описанной системы два возможных камня преткновения. Во-первых, не меняйте имя обработчика события по своему усмотрению — если вы сделаете это, разорвется связь между формой и программным кодом, и обработчик события не будет выполняться, когда событие произойдет. Во-вторых, не меняйте имя элемента управления с помощью Окна свойств,поскольку это действие тоже разорвет связь.

Если же на самом деле нужно исправить неудачное имя, убедитесь в том, что вы изменили имя процедуры так, что оно соответствует новому имени элемента управления.

В обоих случаях (при переименовании процедуры или элемента управления) Access не предупреждает о возможных последствиях. Поэтому помните эти рекомендации, чтобы избежать нежелательных неожиданностей.

Вызов кода в модуле

Полученные знания могут вызвать вопрос: в каких ситуациях вообще может возникнуть необходимость в создании стандартного модуля вручную? Помимо всего прочего нет удобного способа выполнения программного кода и возможности связать его с событием элемента управления на форме.

Стандартные модули полезны, если создан удивительно удачный фрагмент программного кода, который хочется применять в разных местах. Скажем, вы разработали отличную процедуру поиска и хотели бы использовать ее в двух, трех или четырех десятках различных форм. Этот код можно вырезать и вставить во все процедуры, которые в нем нуждаются.

Помимо того, что дублирование кода — всегда плохой выбор (как и дублирование данных). Почему? Подумайте, что произойдет, если вам придется исправлять ошибку или вносить корректировку. Из-за дублирующегося кода придется найти все его копии и повторить в них одно и то же изменение.

Это надежный способ потратить свои выходные дни.

Правильное решение — взять вашу полезную, многоразовую процедуру и поместить ее в модуль. Затем вы можете вызвать ее, когда понадобится, и редактировать ее только один раз, когда необходимо обновить процедуру или устранить ошибку. Для вызова программной процедуры в другом модуле используется имя модуля с последующей точкой ( . ), за которой указывается имя процедуры. Вот пример:

Private Sub ButtonOfPower_Click( )

MyModule.MyCodeRoutine End Sub

Далее приведен оперативный отчет о происходящем в процессе применения данного кода.

1. Нажимается кнопка ButtonOfPower.

2. Программа Access находит процедуру ButtonOf Power_Click и выполняет ее.

3. Код процедуры запускает другую процедуру, MyCodeRoutine в модуле MyModule.Этот код отображает на экране сообщение, которое вы видели раньше (см. рис. 16.3).

4. После того как процедура MyCodeRoutine завершила работу, Access выполняет оставшийся код в процедуре ButtonOf Power_Click. В данном примере в процедуре нет никаких операторов, поэтому процесс завершается в этот момент.

Вы можете вставить одну задачу в любое число процедур. Можно также вызывать процедуры, которые в свою очередь вызывают другие процедуры, также вызывающие дополнительные процедуры и т. д.

Примечание

Подобный прием можно использовать только в случае общедоступных процедур. Частные (Private) не доступны для программного кода, находящегося за пределами модуля, в котором эти процедуры хранятся. Автоматически всем процедурам назначается режим доступа Public до тех пор, пока вы не вставили слово Private перед словом Sub.

Таким образом, процедура MyCodeRoutine в разд. "Написание процедуры с простейшим программным кодом" ранее в этой главе общедоступна.

Если обе процедуры, ButtonOf Power_Click и MyCodeRoutine, хранятся в одном моду-, ле, можно применить некоторую рационализацию. Не нужно включать имя модуля в имя процедуры MyCodeRoutine. Вы можете использовать приведенный далее код:

Private Sub ButtonOfPower_Click( )

MyCodeRoutine End Sub

Теперь программа Access полагает, что процедура MyCodeRoutine должна быть в том же модуле и ищет ее в нем. В данном случае неважно, процедура MyCodeRoutine общедоступная или частная — ваш код все равно может вызывать ее.

Подсказка

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

Рандомно подобранные статьи с сайта:

Life is Strange: Episode 4 ПОМОЩЬ ( пин код, документы, цепочка событий )


Похожие статьи:

admin