|
Программирование >> Проектирование интерфейса пользователя
После ввода дополнительного контролирующего условия код стал намного более безопасным, поскольку он исключает возможность обработки имени нулевой длины. Обратите внимание: программы, представленные в листингах 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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |