На профессиональном уровне. Взаимодействие с другими формами

Взаимодействие с другими формами

Как вы узнали в главе 15, можно извлекать и задавать значения свойств полей и элемен­тов управления на текущей форме или других открытых в данный момент формах. Хит­рость заключается в том, что нужно явно указать программе Access, какую форму вы пытаетесь использовать.

Предположим, что вы хотите изменить цвет элемента управления Price(цена) на форме Product(товар) при щелчке мышью кнопки, находящейся на форме PriceChanger(преобразователь цен). Приведенный далее код не работает, поскольку Access ищет не­существующий элемент управления Priceна форме PriceChanger:

Price.BackColor = vbRed

Следующий код отлично использует описанную хитрость и направляет программу Ac­cess к правильной форме:

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 ReferenceMicrosoft Forms Visual Basic ReferenceReference.Затем вы увидите список всех объектов, предла­гаемых программой Access (щелкните мышью строку Objects)или сформируйте комбиниро­ванный список событий, методов и свойств, предлагаемых объектами Access (щелкните кноп­кой мыши строку Events, Methodsили Properties).

2 Справка редактора VBA приводится на английском языке. —. Пер.