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

 

Все дело в имени – в имени процедуры. Когда вы открываете форму, в которой есть соответствующий  программный код, программа 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 общедоступная или частная — ваш код все равно может вызывать ее.

 

Подсказка

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

 

 

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100