Программирование >>  Проектирование интерфейса пользователя 

1 ... 22 23 24 [ 25 ] 26 27 28 ... 153


После ввода дополнительного контролирующего условия код стал намного более безопасным, поскольку он исключает возможность обработки имени нулевой длины. Обратите внимание: программы, представленные в листингах 5.4 и 5.6, функционально идентичны.

Итерационные циклы

Вы уже ознакомились с управляющими структурами вида End If, While

. . . Wend и Do Loop. В двух последних, циклических, в качестве условия завер-

шения используется логическое и - реже - целочисленное выражение. Но довольно часто встречаются задачи, когда необходимо знать и задавать точное количество шагов выполнения одного и того же блока кода. В подобных ситуациях активно применяются структуры данных в виде массивов и коллекций.

Новый термин

Новый термин

Массивом называется непрерывная последовательность ячеек памяти, адресуемая по имени. Доступ к элементам массива осуществляется по значению целочисленного индекса.

Коллекция - это определяемый пользователем тип данных. Пользователем в данном случае считается программист, создаюгций код на языке Access VBA. Коллекпии подобны массивам, но они обладают некоторыми дополнительными возможностями, выходящими за пределы совокупности методов обычной адресации элементов данных. Подробнее о коллекциях и способах их применения см. главу 6-й час. Управление базами данных .

Язык VBA поддерживает еще одно средство организации циклов. Речь идет о конструкции For . Next, используемой в тех случаях, когда число шагов выполнения

одного и того же блока кода (итераций) заранее известно. Управляющая структура

For ... Next в своей самой простой форме описывается следующим выражением:

For Индекс = НижняяГраница То ВерхяяГраница

одна или несколько строк кода Next [Индекс]

Обязательные атрибуты первой строки конструкции слова For, To и знак

равенства (=). Запись For ... Next следует понимать так: пелочисленной переменной Индекс цикла присваивается начальное значение НижняяГраница; после этого выполняются строки кода, расположенные ниже, до строки со словом Next; далее текущее значение переменной Индекс увеличивается на единицу и сравнивается с величиной ВерхняяГраница; если граница не превышена, строки цикла выполняются в очередной раз; в противном случае

цикл завершается. В качестве величин НижняяГраница и ВерхняяГраница могут использоваться литеральные значения, именованные константы, а также арифметические выражения либо результаты выполнения функций типа Integer. (В приведенном ниже разделе Функции Lbound и Utx>und рассмотрены специальные средства языка VBA, облегчающие задание нижних и верхних границ изменения переменной цикла.) Последняя строка кода цикла содержит служебное слово Next, за которым допускается указывать наименование переменной, используемой в качестве индекса. Несмотря на то, что идентификатором переменной в данном случае можно пренебречь, для облегчения восприятия кода программы все же рекомендуется задавать его, поскольку итерационные циклы, как и иные управляющие структуры, могут вложенными, и задача сопоставления строк For и Next значительно упрощается, если после Next указано наименование переменной цикла.

Между начальной и конечной строками конструкции For . . . Next может быть размещен любой код. Степень его сложности определяется условиями задачи и выбранным методом ее решения. Впрочем, чем более простым окажется код, тем лучше; старайтесь выносить блоки кода, решающие отдельные подзадачи, за пределы управляющих структур и оформляйте их в виде процедур или функций. (Подробнее о



функциях речь пойдет на 8-м занятии.) Листинг 5.7 содержит пример использования структуры For . . . Next; нетрудно заметить его сходство с текстом листинга 5.5.

Листинг 5.7. Пример цикл ... Next

1: Su sers ( )

2;. Dim Users (10) As String

.a-: Dim I As Integer 4.; For I = 1 to 10 Users (I) = Имя пользователя 6: Next I 7: End Sub

InputBox ( Введите имя пользователя:

Для наименований массивов рекомендуется использовать существительные множественного числа, как это сделано в строке 2 листинга 5.7.

Процедура AddUsers предполагает ввод в точности десяти имен пользователей (в предыдущих примерах это число не ограничивалось). Строка 2 содержит объявление массива Users, каждый элемент которого представляет собой переменную типа String. В строке 3 объявлена целочисленная переменная цикла I. Строки 4 и 6 ограничивают конструкцию цикла For . Next, а строка 5, предписывающая ввод данных, будет повторена указанное число раз (10). На каждом шаге цикла очередному элементу массива, адресуемому индексной переменной I, присваивается значение, введенное пользователем в диалоговом окне. На рис. 5.3 приведено окно Locals, отображающее содержимое массива Users после его заполнения.

Be УК да, ewt Е* Is* 1*Мге fflmte. 3*

End Select ted ЛиЬ

Di CaeratlG) As Serine Diio I Аз InMiger Fer J - : Xc 1 О

End sub


- ll rp(ffh

- U *!-S(2

- U f.G

- ИмчМ

- UwPt

- UMfi(6

- Osef (7

- U i**

- UHnJl.i

- iter.00) I

Лари за

Pmc. J.J. O/cho Locals жтора Visual Basic отображает содержимое массива, заполненного пользователем



Прямая и обратная итерации

Структура For Next предполагает возможность выполнения прямой

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

For Индекс Граница То ВерхяяГраница Step Шаг

одна или несколько строк кода Next [Индекс]

Выражение синтаксиса почти не изменилось. Единственное отличие состоит в том, что в конец строки For ... То добавлено служебное слово Step, за которым следует значение шага прирашения переменной цикла. В качестве величины Шаг могут использоваться целочисленные литералы, именованные константы, переменные и арифметические выражения. Теперь цикл может выполняться даже в том случае, если значение выражения ВерхняяГраница меньше значения.НижняяГраница - достаточно после слова step задать отрицательную величину. Листинг 5.8 служит примером цикла с отрицательным шагом изменения индекса.

Листинг 5.8. Пример цикл ... Next с отрицательным шагом изменения индекса

Dim Users(10) As String

Dim I As Integer

Dor 1 = 10 to 1 Step -1

Users (1) = InputBox(

пользователя . ) Next I End Sub

Введите имя пользователя: .

Код листинга 5.8 отличается от предыдущего примера только содержимым строки 4. Теперь массив Users заполняется в обратном порядке, начиная с 10-го элемента.

Функции Lbound и Ubound

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

Код должен быть гибким - с этим трудно поспорить, - и поэтому создатели Access и VBA предусмотрительно предоставили в распоряжение программистов специальные функции - LBound и Ubound. Lbound возвращает номер первого значимого элемента указанного массива, a Ubound - последнего.

Мы вновь обратимся к знакомому примеру, связанному с заполнением массива имен пользователей в диалоговом режиме, - листинг 5.9 представляет вариант кода, в котором применены функции LBound и Ubound.

Листинг 5.9. Пример использования функций Lbound и Ubound

1: Sub AddUsers ( )

2: DimUsers(lO) As String

3 : Dim 1 As Integer

4: Dor 1 = Ubound( Users )

tound( Users ) Step -1



1 ... 22 23 24 [ 25 ] 26 27 28 ... 153

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика