На профессиональном уровне. Взаимодействие с другими формами
Взаимодействие с другими формами
Как вы узнали в главе 15, можно извлекать и задавать значения свойств полей и элементов управления на текущей форме или других открытых в данный момент формах. Хитрость заключается в том, что нужно явно указать программе Access, какую форму вы пытаетесь использовать.
Предположим, что вы хотите изменить цвет элемента управления Price(цена) на форме Product(товар) при щелчке мышью кнопки, находящейся на форме PriceChanger(преобразователь цен). Приведенный далее код не работает, поскольку Access ищет несуществующий элемент управления Priceна форме PriceChanger:
Price.BackColor = vbRed
Следующий код отлично использует описанную хитрость и направляет программу Access к правильной форме:
Forms("Product").Price.BackColor = vbRed
Технически приведенный код заставляет программу Access заглянуть в коллекцию Forms (формы), отслеживающую все открытые в данный момент формы. (Если в настоящий момент форма Productне открыта, этот оператор даст сбой.) Он извлекает из коллекции форму Product,переходит к форме для доступа к элементу управления Priceи затем углубляется в него для поиска свойства BackColor (Цвет фона).
Логически равноценную строку кода можно записать двумя способами. Программисты Access старого образца применяют причудливый синтаксис с восклицательными знаками, который выглядит следующим образом:
Forms!Product!Price!BackColor = vbRed
Программа Access интерпретирует обе строки одинаково. Это просто дело вкуса. Но вы должны знать оба варианта, на случай, если столкнетесь со странным кодом с восклицательными знаками.
Если вас огорчает, что этот подход приводит к ошибке в случае закрытой нужной формы, оба описанных метода не смогут выручить вас. В главе 17 вы узнаете, как открывать форму, когда захочется.
В табл. 16.1 перечислены некоторые свойства элементов управления, которые могут вам понадобиться в программном коде на языке Visual Basic.
Таблица 16.1. Полезные свойства элементов управления
Свойство | Тип данных | Описание |
Value (значение) | Зависит от конкретного элемента | Хранит значение элемента управления. Обычно все элементы связаны с полями, поэтому свойство Value позволяет считывать или изменять значение из текущей записи. В зависимости от типа данных поля свойство может быть текстовым, числовым, логическим и т. д. |
Enabled (включено или доступно) | True (истина) или False (ложь) | Определяет возможность корректировки значения элемента управления. Если задать в свойстве значение False, элемент управления блокируется и пользователь, работающий с формой, не сможет редактировать поле (несмотря на то, что ваш код может все еще пытаться изменять значение Value). Отключенные элементы управления выглядят не так, как включенные элементы управления — обычно у них подернутый серой пеленой "серый" внешний вид |
Visible (видимый) | True (истина) или False (ложь) | Определяет, может ли пользователь, работающий с формой, видеть элемент управления. Если у свойства значение False (ложь), элемент исчезает с формы. Это свойство — удобный способ скрыть неиспользуемые поля. Если клиент живет в Замбии, можно скрыть поле State (штат) |
ForeColor (цвет текста) и BackColor (цвет фона) | Число | Определяет цвет для вывода текста (цвет текста) и цвет, отображаемый за текстом (цвет фона) |
Left (слева) и Тор (сверху) | Число | Определяет местоположение элемента управления на форме. Свойство Left (слева) определяет расстояние от левого края формы до левого края элемента. Свойство Тор (сверху) задает расстояние от верхнего края формы до верхнего края элемента управления. Оба значения задаются в пикселах |
Width (ширина) и Height (высота) | Число | Определяет размер элемента управления в пикселах |
FontName (шрифт) и FontSize (размер шрифта) | Текстовая строка и число (соответственно) | Определяет шрифт, который применяется для отображения текста в элементе управления. FontName — это название гарнитуры шрифта (например, "Arial"), a FontSize — его размер в пунктах (например, 10) |
FontBold (жирное начертание) и FontI-talic (курсив) | True (истина) или False (ложь) | Определяет способ начертания текста (жирный или наклонный) |
Picture* (рисунок) | Текстовая строка | Позволяет отображать фоновое изображение на части формы, на вкладке или кнопке. Вы задаете путь к файлу с рисунком |
Таблица 16.1 (окончание)
Свойство | Тип данных | Описание |
Text* (текст) | Текстовая строка | Задает текущий текст в текстовом поле. В большинстве случаев это свойство содержит те же данные, что и свойство Value. Но если кто-то редактирует текст и еще не перешел к другому элементу управления, содержимое этих двух свойств разное. Свойство Value содержит текст, хранящийся в таблице, а свойство Text — отредактированные данные, которые еще не применены |
Caption* (подпись) | Текстовая строка | Задает текст подписи или кнопки или заголовок формы. Это свойство важно, когда создаются подписи, не связанные с полями таблицы. Элемент управления Подпись можно применять для отображения сообщения о состоянии или статусе |
IternsSelected* (выбранные элементы) | Объект-коллекция | Представляет собой коллекцию, объект специального типа, содержащий ноль или больше подобъектов. Данная коллекция содержит значения всех выбранных в данный момент в списке элементов. Свойство ItemsSelected полезно, только если создан список, поддерживающий многочисленные выделения, В противном случае используйте свойство Value |
* Это более специальные свойства и в большинстве элементов управления они не используются.
Методы
Методы позволяют выполнять действия с объектом. Во многих случаях вызов метода дает больше, чем просто задание свойства. В самом деле, один метод может выполнить комплексную операцию, которая повлияет на многие свойства. Метод Requery (обновление) заставляет вашу форму получить самые свежие данные из БД и затем обновить содержимое всех ее элементов управления.
Подсказка
Если применяются элементы управления, большая часть времени тратится на работу со свойствами. Действительно, у элементов управления огромное множество свойств и лишь несколько добавочных методов.
Для применения метода вводится имя объекта с последующей точкой, за которой набирается имя метода. Но вам не нужен знак равенства, т. к. вы не задаете значение метода. Вы просто вызываете его для выполнения или активизируете.
Далее приведен пример обновления текущей записи формы с помощью метода Refresh (обновить объект):
Form.Refresh
Иногда методу требуется дополнительная информация. Если у вас как раз тот случай, вы узнаете об этом, т. к. средство Visual Basic IntelliSense даст знать в процессе написания программного кода (рис. 16.7).
Рис.16.7. Редко применяемый метод Move позволяет одним махом изменить местоположение и размер элемента управления. Как только вы введете имя метода, редактор Visual Basic отобразит четыре значения, которые нужно задать. В данном примере только первое значение (Left) обязательно — остальные заключены в квадратные скобки, что свидетельствует о возможности их пропуска
Если в методе нужно задать дополнительные данные, следует добавить пробел после имени метода и дальше указать соответствующее значение. Если требуется ввести несколько значений, каждое из них следует отделять запятой. Далее приведен пример, перемещающий элемент управления в левый верхний угол формы:
Description.Move 0, 0
В табл. 16.2 перечислены наиболее важные методы элементов управления.
Таблица 16.2. Полезные методы элементов управления
Метод | Описание |
SetFocus (установить фокус) | Переносит курсор внутрь элемента управления, делая его, таким образом, действующим элементом. Этот метод полезен при выполнении проверки условий на значения. Если в поле найдена ошибка, можно вернуть пользователя к элементу управления с ошибкой |
Undo (отмена) | Аннулирует самые последние (незафиксированные) изменения в элементе управления. Этот метод можно вызвать в форме для отмены всех изменений и возврата к исходным значениям. Если в данный момент форма не в режиме редактирования, метод не делает ничего |
Таблица 16.2 (окончание)
Метод | Описание |
Recalc (повторное вычисление) | Пересчитывает любые выражения в элементах управления формы |
Refresh* (обновить объект) | Получает из таблицы самые свежие значения для данной записи и, соответственно, обновляет форму. Этот метод полезен, если вы только что выполнили другую задачу, которая могла изменить запись, или работаете с многопользовательской БД (см. главу 18), в которой несколько человек одновременно могут изменять запись |
Requery* (обновление) | Повторно выполняет запрос, применяемый для получения данных формы, и затем отображает полученные данные, начиная с первой записи. Этот метод подобен методу Refresh, но воздействует не на текущую запись, а на все записи. Этот метод можно применять к списку подстановки для обновления его содержимого |
* Эти методы применяются только к объектам формы, а не отдельным элементам управления.
События
Как вы знаете, события — это сообщения, которые объекты используют для передачи в ваш программный код сведений о том, что только что произошло нечто важное. Вы уже управляли событиями и применяли их в данной главе для реагирования на щелчки мышью кнопок. Список самых распространенных событий элементов управления приведен в табл. 15.4.
До сих пор не рассматривался один аспект: как события могут предоставлять дополнительные биты данных. Как вы, наверное, уже заметили, у каждой процедуры есть пара скобок. Посмотрим на них еще раз:
Private Sub ButtonOfPower_Click ()
В предыдущих примерах в этих скобках не было ничего. Но они введены не просто так. Некоторые события передают в ваш код дополнительную информацию о событии, и она вставляется в этот сэндвич из двух скобок.
Рассмотрим событие Нажатие клавиши(On Key Press) поля ввода, которое возникает каждый раз, когда кто-то нажимает символ на клавиатуре. Оно предоставляет специальный числовой код, обозначающий нажатую клавишу (программисты называют его кодом ASCII.)
Если добавить процедуру, реагирующую на событие Нажатие клавиши(On Key Press), программа Access сгенерирует код, подобный приведенному далее:
Private Sub MyTextBox_KeyPress(KeyAscii As Integer) End Sub
Этот код означает, что событие Нажатие клавиши(On Key Press) снабжает ваш код новой порцией информации. Это целое число, названное KeyAscii, его можно использовать в вашем коде.
Далее приведен пример, который просто отображает код нажатой клавиши в окне сообщения:
Private Sub MyTextBox_KeyPress(KeyAscii As Integer)
MsgBox "Вы нажали клавишу с кодом: " & KeyAscii
End Sub
Некоторые события предоставляют несколько порций данных. В этих случаях вы увидите в скобках целый список. Каждая порция данных отделяется запятой и называется параметром.
Примечание
Формально параметры — разновидность переменных. Переменные — это удобные контейнеры, хранящие некоторые данные. (Эти данные могут меняться, поэтому их и назвали переменными.) Вы узнаете больше об использовании переменных а разд. "Хранение информации в переменных" главы 17.
Далее приведен пример для события Перемещение указателя(On Mouse Move), которое возникает при перемещении указателя мыши поверх элемента управления. Открывающееся объявление процедуры такой длины, что приходится разделить его на две строки с помощью знака подчеркивания:
Private Sub SomeControl_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
End Sub
В данном случае вы получаете четыре порции данных. Параметр Button обозначает, какие кнопки мыши нажаты в данный момент. Параметр Shift показывает, удерживаются ли нажатыми во время перемещения мыши клавиши <Shift>, <Ctrl> и <Alt>. И, наконец, параметры X и Y определяют местоположение указателя мыши (его координаты).
Применение объектов
Теперь, когда вы познакомились с основами языка Visual Basic, вам, наверное, не терпится начать писать реальный программный код. В следующих разделах представлены два примера, заставляющие элементы управления работать.
Подсказка
Если хотите знать больше, можно найти подробное руководство по применению объектов в справочной, системе Access. Для получения справки выберите в редакторе VESA2 Help→ Справка: Microsoft Visual Basic(Help → Microsoft Visual Basic Help). Дальше последовательно выберите следующие темы: Visual Basic for Applications Language Reference→Microsoft Forms Visual Basic Reference→Reference.Затем вы увидите список всех объектов, предлагаемых программой Access (щелкните мышью строку Objects)или сформируйте комбинированный список событий, методов и свойств, предлагаемых объектами Access (щелкните кнопкой мыши строку Events, Methodsили Properties).
2 Справка редактора VBA приводится на английском языке. —. Пер.