Главная страница
Навигация по странице:

  • Нажатие кнопки

  • OneButtonForm

  • Р ис. 16.5.

  • Для тех кто понимает. Как код связывается с событиями Все дело в имени - в имени процедуры. Когда вы открываете

  • ButtonOfPower. Программа Access находит процедуру ButtonOf Power_Click и выполняет ее. Код процедуры запускает другую процедуру, MyCodeRoutine в модуле MyModule

  • Чтение и запись полей на форме

  • Description ).

  • Малоизвестная или недооцененная возможность Разбиение длинных строк кода

  • Свойства Свойства не должны быть для вас новостью. В конце концов, вы потратили достаточно вре­мени на их настройку в Окне свойств

  • Поле

  • Окне свойств.

  • Краткое содержание 29 Об этих стрелках 30 о сочетаниях клавиш 32 о щелчках кнопкой мыши 33 Примеры 33


    Скачать 19.64 Mb.
    НазваниеКраткое содержание 29 Об этих стрелках 30 о сочетаниях клавиш 32 о щелчках кнопкой мыши 33 Примеры 33
    АнкорAccess_2007.doc
    Дата16.03.2017
    Размер19.64 Mb.
    Формат файлаdoc
    Имя файлаAccess_2007.doc
    ТипКраткое содержание
    #3862
    страница45 из 65
    1   ...   41   42   43   44   45   46   47   48   ...   65

    Подсказка

    Модули форм не выводятся в области переходов. Если они нуждаются в редактировании, сле­дует открыть редактор 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

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

    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 общедоступ­ная или частная — ваш код все равно может вызывать ее.
    Подсказка

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

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

    Предположим, что вы разрабатываете (нечто опасное) программную процедуру, очи­щающую текстовое поле. Вы планируете применять ее для сбрасывания текста в поле De­scription (описание). Далее приведена строка кода, выполняющая эту работу:

    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 = "Действительно чудесный товар."

    Теперь, когда вы узнали, что все элементы управления на ваших формах — это объекты с целым набором полезных параметров, которые можно изменять, возникает важный вопрос: как узнать, какие свойства есть у объекта и как найти нужные вам? Несколько рекоменда­ций окажут необходимую помощь.

    • У идентичных элементов управления одинаковые свойства. Несмотря на то, что каждое поле ввода на вашей форме представлено отдельным объектом "поле ввода", у всех объектов "поле ввода" одни и те же свойства. Очевидно, что значения свойств могут отличаться, но вы можете быть уверены в том, что если вы нашли свойство BackColor в одном поле ввода, это же свойство вы найдете и у всех остальных полей ввода.

    • У похожих элементов управления похожие свойства. У них у всех есть свойство BackColor, будь то поле ввода, кнопка или скромная подпись. Даже объекты, представляющие разные части формы (например, Detail (область данных), FormHeader (заголовок формы), FormFooter (примечание формы)) содержат свойство BackColor для задания цвета их фона. Этот вид стандартизации позволяет применить знания об одном элементе управления к другому элементу.

    • С
      войство можно найти в
      Окне свойств. Имена свойств, применяемые в программном коде, обычно соответствуют именам свойств, которые вы видите в Окне свойств (в англоязычной версии программы). Существует одно отличие — у имен свойств, используемых в коде, нет пробелов, поэтому свойство Back Color (Цвет фона) в Окне свойств в программе превращается в свойство BackColor.

    1   ...   41   42   43   44   45   46   47   48   ...   65


    написать администратору сайта