Краткое содержание 29 Об этих стрелках 30 о сочетаниях клавиш 32 о щелчках кнопкой мыши 33 Примеры 33
Скачать 19.64 Mb.
|
Подсказка Модули форм не выводятся в области переходов. Если они нуждаются в редактировании, следует открыть редактор Visual Basic и затем в окне Project дважды щелкнуть кнопкой мыши нужный модуль. Или же можно открыть соответствующую форму, выбрать нужное событие и использовать кнопку с многоточием для перехода прямо в интересующую вас программную процедуру. Когда выполняются описанные действия, программа Access не создает новый модуль, а вставляет новую пустую процедуру для вашего события. Если ваша кнопка названа ButtonOfPower (кнопка запуска), вы увидите код, похожий на приведенный далее: Private Sub ButtonOfPower_Click() End Sub Эта процедура похожа на процедуру, созданную раньше, но с двумя отличиями. ■ Она начинается со слова Private. Это слово гарантирует невозможность использования данной процедуры другими модулями. Данная процедура доступна только в форме, содержащей кнопку. (Если не указать слово Private, будет применяться стандартный режим доступа, называемый Public, и ваша программная процедура станет общедоступной.) В большинстве случаев выбор режима доступа не важен, но Private считается более предпочтительным. Е е имя соответствует формату [ИмяЭлементаУправления]_[ИмяСобытия]. Например, приведенная ранее процедура относится к событию Нажатие кнопки (On Click) кнопки с именем ButtonOfPower. Рис. 16.4. Модуль для формы всегда именуется Form_[FormName]. Вы видите модуль для формы, названной OneButtonForm (однокнопочная форма) Примечание Постойте, разве событие не называется On Click? Сохраняя все принятые соглашения в силе, язык Visual Basic, в отличие от разработчика форм в программе Access, применяет немного иное правило именования событий. Он отбрасывает предлог "On" и все имеющиеся пробелы, таким образом, событие On Click (нажатие кнопки) становится событием Click. Лучше всего не волноваться по поводу расхождения имен и предоставить возможность программе Access сформировать правильные имена для ваших процедур. Для того чтобы проверить вашу процедуру, нужно добавить в нее код. Пока вы познакомились лишь с одной командой, поэтому попробуйте применить ее для вывода сообщения: Private Sub ButtonOfPower_Click( ) MsgBox "Вы щелкнули мышью кнопку ButtonOfPower." End Sub Теперь вернитесь к форме и щелкните вашу кнопку мышью. Вы должны увидеть сообщение, показанное на рис. 16.5, оно означает, что ваш код уловил событие и успешно на него отреагировал. Подсказка Во время редактирования модуля нет необходимости сохранять его. Можно спокойно переходить между окном кода и формой, отображенной в окне программы Access, туда и обратно для проверки каждого вносимого в код изменения. Р ис. 16.5. События обеспечивают автоматическое выполнение программного кода. В данном случае, если щелкнуть мышью кнопку ButtonOfPower, Access тут же отобразит сообщение Если позже вы уберете с формы кнопку ButtonOfPower, программа Access не удалит программный код. Он останется на прежнем месте, но будет неактивен. Это удобно, если в программном коде есть что-то полезное, что впоследствии, возможно, вы захотите применить где-нибудь еще. (В данном случае вас выручат операции вырезания и вставки.) Но если это просто фрагмент старого кода, при первой же возможности воспользуйтесь редактором Visual Basic для удаления процедуры. Для тех кто понимает. Как код связывается с событиями Все дело в имени - в имени процедуры. Когда вы открываете форму, в которой есть соответствующий программный код, программа Access ищет процедуры с определенными именами. Если она находит процедуру, названную MyButton Click, то, прежде всего, проверяет элемент управления с именем MyButton и наличие у него события с именем Click (нажатие кнопки). Если обе детали обнаружены, эта программная процедура становится обработчиком данного события, что на своеобразном жаргоне программистов означает связывание вашего кода с событием. Когда возникает событие (например, когда кнопку щелкнули мышью), Access выполняет код из вашей процедуры. Если программа Access находит процедуру, названную MyButton_Click, а на форме нет элемента управления с именем MyButton, не стоит паниковать. Access просто предполагает, что вы создали процедуру для собственных внутренних нужд. Поскольку эта процедура не является обработчиком события, программа Access не запускает ее автоматически в ответ на возникновение события. Но она все же при необходимости может обращаться к вашему коду, как описано на этой странице. У описанной системы два возможных камня преткновения. Во-первых, не меняйте имя обработчика события по своему усмотрению — если вы сделаете это, разорвется связь между формой и программным кодом, и обработчик события не будет выполняться, когда событие произойдет. Во-вторых, не меняйте имя элемента управления с помощью Окна свойств, поскольку это действие тоже разорвет связь. Если же на самом деле нужно исправить неудачное имя, убедитесь в том, что вы изменили имя процедуры так, что оно соответствует новому имени элемента управления. В обоих случаях (при переименовании процедуры или элемента управления) Access не предупреждает о возможных последствиях. Поэтому помните эти рекомендации, чтобы избежать нежелательных неожиданностей. Вызов кода в модуле Полученные знания могут вызвать вопрос: в каких ситуациях вообще может возникнуть необходимость в создании стандартного модуля вручную? Помимо всего прочего нет удобного способа выполнения программного кода и возможности связать его с событием элемента управления на форме. Стандартные модули полезны, если создан удивительно удачный фрагмент программного кода, который хочется применять в разных местах. Скажем, вы разработали отличную процедуру поиска и хотели бы использовать ее в двух, трех или четырех десятках различных форм. Этот код можно вырезать и вставить во все процедуры, которые в нем нуждаются. Помимо того, что дублирование кода — всегда плохой выбор (как и дублирование данных). Почему? Подумайте, что произойдет, если вам придется исправлять ошибку или вносить корректировку. Из-за дублирующегося кода придется найти все его копии и повторить в них одно и то же изменение. Это надежный способ потратить свои выходные дни. Правильное решение — взять вашу полезную, многоразовую процедуру и поместить ее в модуль. Затем вы можете вызвать ее, когда понадобится, и редактировать ее только один раз, когда необходимо обновить процедуру или устранить ошибку. Для вызова программной процедуры в другом модуле используется имя модуля с последующей точкой ( . ), за которой указывается имя процедуры. Вот пример: Private Sub ButtonOfPower_Click( ) MyModule.MyCodeRoutine End Sub Далее приведен оперативный отчет о происходящем в процессе применения данного кода.
Вы можете вставить одну задачу в любое число процедур. Можно также вызывать процедуры, которые в свою очередь вызывают другие процедуры, также вызывающие дополнительные процедуры и т. д. Примечание Подобный прием можно использовать только в случае общедоступных процедур. Частные (Private) не доступны для программного кода, находящегося за пределами модуля, в котором эти процедуры хранятся. Автоматически всем процедурам назначается режим доступа Public до тех пор, пока вы не вставили слово Private перед словом Sub. Таким образом, процедура MyCodeRoutine в разд. "Написание процедуры с простейшим программным кодом" ранее в этой главе общедоступна. Если обе процедуры, ButtonOf Power_Click и MyCodeRoutine, хранятся в одном моду-, ле, можно применить некоторую рационализацию. Не нужно включать имя модуля в имя процедуры MyCodeRoutine. Вы можете использовать приведенный далее код: Private Sub ButtonOfPower_Click( ) MyCodeRoutine End Sub Теперь программа Access полагает, что процедура MyCodeRoutine должна быть в том же модуле и ищет ее в нем. В данном случае неважно, процедура MyCodeRoutine общедоступная или частная — ваш код все равно может вызывать ее. Подсказка Если вы хотите повторно использовать код в нескольких местах одной и той же формы (например, в ответ на нажатие разных кнопок), подумайте о создании собственной процедуры и размещении кода в ней. Если же предполагается использование одного фрагмента кода в нескольких формах, лучше поместить его в процедуру, хранящуюся в отдельном модуле. Чтение и запись полей на форме Как вы узнали в главе 15, самые замечательные макросы — те, которые контролируют ваши формы и элементы управления. Код VB справляется с этой задачей потрясающе легко. Вам просто нужно знать имена всех элементов управления, с которыми вы хотите работать. Предположим, что вы разрабатываете (нечто опасное) программную процедуру, очищающую текстовое поле. Вы планируете применять ее для сбрасывания текста в поле Description (описание). Далее приведена строка кода, выполняющая эту работу: Description = "" В этой строке приведен основной оператор присваивания языка Visual Basic (строка кода, изменяющая порцию данных), и вся строка сосредоточена вокруг знака равенства (=). Когда Access выполняет эту строку кода, программа берет содержимое справа от знака равенства (в данном случае пустую строку со знаками кавычек, представляющими текст) и вставляет его во вместилище, расположенное слева от знака равенства (в данном случае поле Description). В результате содержимое поля Description стерто. Примечание Можно также использовать знакомые квадратные скобки, т. е. [Description] вместо Description. Скобки не обязательны, если вы не настолько самонадеянны, чтобы пренебрегать правилами именования, с которыми познакомились в разд. "Правило 1. Выбирайте подходящие имена полей" главы 2. Если у вас есть имя текстового поля с пробелом, такое имя нужно обязательно заключать в квадратные скобки. Конечно же, можно использовать, конкретный текстовый фрагмент: Description = "Введите сюда что-нибудь, пожалуйста" Результат выполнения этого кода аналогичен вашему собственноручному вводу текста (за исключением того, что происходит все гораздо быстрее). Как известно, при корректировке любого поля текущая запись переводится в режим редактирования. Как только вы переходите к другой записи или закрываете форму, программа Access фиксирует изменения и сохраняет новые значения в БД. С помощью фиксированных значений можно решить только ограниченный круг задач. В результате, когда используется фиксированное текстовое значение, вначале нужно решить, что именно вы хотите использовать. Когда вы щелкните кнопку мышью и запустите код, возможно, ваши желания изменятся. По этой причине программисты редко используют фиксированные значения в подобном случае. Вместо этого они предпочитают более сложные выражения, очень похожие на выражения Access, которые применялись в вычислениях запросов (см. разд. "Вычисляемые поля" главы 7) и условий на значения (см. разд. "Правила верификации или условия на значения" главы 4). С текстом можно использовать оператор слияния & для создания длинного фрагмента текста из нескольких более коротких фрагментов. Далее приведен пример, в котором берется текущее описание, и к нему в конец добавляется предложение, идентифицирующее товар по названию. Description = Description & " This is a description for " & ProductName & "." Если начальное значение Description равно "Enjoy delectable waves of fudge." ("Насладитесь упоительными волнами сладости."), в результате оно может стать таким "Enjoy delectable waves of fudge. This is a description for Fudge Tsunami." ("Насладитесь упоительными волнами сладости. Это описание Fudge Tsunami."). Малоизвестная или недооцененная возможность Разбиение длинных строк кода Если вы имеете дело с чрезмерно длинными строками кода, самое время применить символ продолжения строки языка Visual Basic, таково необычное название символа подчеркивания (_). Заканчивайте любую строку пробелом и знаком подчеркивания и можете продолжить программный код сразу в следующей строке: Description = Description & _ " This is a description for " & _ ProductName & "." Если вы собираетесь применить этот прием, стоит задать отступ во всех строках, кроме первой, так вы сможете сразу увидеть, что это часть одного оператора кода. Гораздо чаще в выражениях используются числовые значения или даты. Далее приведен код для кнопки IncreasePrice (повышение цены), которая повышает цену на 10% при каждом нажатии кнопки (и самое замечательное в том, что вы сможете щелкать кнопку мышью столько раз, сколько захотите): Private Sub IncreasePrice_Click Price = Price * 1.10 End Sub Обзор разных операций, которые можно применять в выражениях для выполнения вычислений различных типов (например, сложения, умножения, деления и т. д.), приведен в табл. 7.1. Примечание Язык Visual Basic трактует поля Да/Нет как поля True/False(Истина/Ложь). Конечный результат такой же, а синтаксис немного отличается. Для задания значения поля Да/Нет используется одно из двух встроенных ключевых слов Visual Basic: True или False. Что такое объекты На самом деле с элементами управления можно делать гораздо больше. Вместо простого изменения их содержимого у вас есть возможность изменять их цвет, шрифт, местоположение, видимость и множество других характеристик. Для того чтобы стать волшебником, следует усвоить, что все элементы управления — программируемые объекты. В мире программирования объект — это не что иное, как удобный способ собрать вместе некоторые связанные параметры. Поле Description — не просто одно значение, это целый объект "поле ввода", а это значит, что у него есть все виды встроенных параметров. Если понять, как действует поле ввода, можно добраться до всех остальных параметров элемента. Примечание Программа Access создает некоторую путаницу, потому что применяет слово объект в двух разных смыслах. На протяжении всей книги вы называли объектами БД все компоненты вашей БД (такие как таблицы, запросы и формы). Программисты пользуются словом "объект" в более строгом смысле для обозначения программной структуры, собирающей вместе связанные параметры и функциональные возможности (и в данной главе этот термин применяется именно в этом смысле). Взаимодействовать с объектами можно тремя способами. ■ С помощью свойств. Свойства — это порции данных, относящихся к объекту. У объекта Поле ввода есть свойство Fontsize (Размер шрифта), которое управляет размером его текста. • С помощью методов. Методы — это действия, которые можно выполнять с помощью объекта. Например, у всех форм есть метод Requery (обновление), позволяющий повторно выполнить запрос, с помощью которого получены данные формы. ■ С помощью событий. События — это сообщения, которые посылает объект, и на которые вы можете откликнуться с помощью вашего программного кода. Вы можете отреагировать на нажатие кнопки мышью, используя событие кнопки On Click (нажатие кнопки). В следующих разделах все три эти характеристики объекта рассматриваются более подробно. Свойства Свойства не должны быть для вас новостью. В конце концов, вы потратили достаточно времени на их настройку в Окне свойств, добиваясь подходящего форматирования и поведения. Но свойства предстают совсем в ином свете, когда вы получаете возможность изменять их средствами программного кода. С помощью кода свойства можно динамически изменять в ответ на различные действия (например, нажатие кнопки или редактирование текста в поле ввода). Этот подход открывает целый мир новых возможностей. Секретный ключ к встроенным свойствам объекта — скромная точка (которую фанаты программирования называют операцией "точка"). Предположим, что вы хотите изменить цвет фона поля Description. Это можно сделать с помощью задания значения в свойстве BackColor (цвет фона) соответствующего объекта "поле ввода". Вот как это делается: Description.BackColor = vbYellow В этой строке программного кода берется объект Description и затем применяется операция "точка" для выбора его свойства BackColor. Задается значение свойства BackColor с помощью специально созданного ключевого слова vbYellow. Имя свойства в программном коде, как вы видели в случае событий, не всегда совпадает с его именем в Окне свойств. В программном коде имена свойств никогда не содержат пробелы. Эту строку кода можно использовать в любой процедуре модуля формы до тех пор, пока у этой формы на самом деле есть элемент управления Поле, названный Description. Примечание Цвета в Access задаются числовыми кодами. VB упрощает жизнь для большинства широко распространенных цветов, предлагая использовать заранее определенные имена, начинающиеся с букв vb. Эти имена — рациональный способ ссылки на соответствующий числовой код цвета. За кадром vbYellow — это 65 535. (Если поискать в справке Access слово "vbYellow", можно найти полный список восьми основных цветовых констант. В примечании "Практические занятия для опытных пользователей. Получение нужного цвета" разд. "Обозначение измененной записи" далее в этой главе вы узнаете, как выбирать дополнительные цвета.) Если не применять операцию "точка", вы будете использовать свойство но умолчанию. Для поля ввода свойство по умолчанию — Value (значение), предоставляющее содержимое поля. Вот почему можно написать не содержащую операции "точка" строку, подобную приведенной далее: Description = "Действительно чудесный товар." Теперь, когда вы узнали, что все элементы управления на ваших формах — это объекты с целым набором полезных параметров, которые можно изменять, возникает важный вопрос: как узнать, какие свойства есть у объекта и как найти нужные вам? Несколько рекомендаций окажут необходимую помощь.
|