![]() |
|
Программирование >> Проектирование интерфейса пользователя
Хотите немного покружиться? Access VBA, как и все другие языки программирования, наделен возможностями организации циклических вычислений. Одна из конструкций, позволяющих решить подобную задачу, - While . . . Wend. Она позволяет выполнять одну и ту же последовательность строк кода до тех пор, пока результат вычисления логического выражения, расположенного после служебного слова while, остается истинным. Синтаксис управляющей структуры While . . . Wend таков: While Wend (условное выражение) одна или несколько строк кода В первой строке конструкции находится служебное слово While, которое сопровождается заключенным в круглые скобки логическим выражением, возвращающим результат типа Boolean. Если результат вычисления логического выражения равен False, код, расположенный внутри конструкции, не будет выполняться вовсе. Повторим - структура вида while ... Wend позволяет выполнить одну и ту же действий нуль или более раз. Пример использования While . Wend приведен ниже, в тексте листинга 5.4. ![]() В качестве условного выражения в конструкции While . . . Wend могут использоваться не только логические выражения, дающие в результате расчета значения типа Boolean, но и арифметические, которые возвращают значения Integer. В последнем случае целочисленное значение 0 будет трактоваться системой как False, а любые целые числа, не равные 0, - как True. Например, конструкция вида While (Целочисленная Переменная) вполне работоспособна. Листинг 5.4. Пример использования управляющей структуры While ... Wend Dim User As String User = имя пользователей , User ) While (Len( User ) > 0) MsgBox Добавление пользователя & User, vblnformation User = имя пользователей , User ) Wend End Sub Листинг 5.4 демонстрирует процесс ввода имен пользователей, выполняемый до тех пор, пока не выбрана кнопка Cancel (Отмена) либо не введено имя нулевой длины. Строки 1 и 8 задают начало и конец процедуры WhileTest. В строке 2 объявляется переменная User типа String, предназначенная для хранения текущего имени. В строке 3 вызывается знакомая вам функция InputBox, предоставляющая пользователю программы возможность ввести первое имя. Строка 4 - начало конструкции цикла while. В качестве условного выражения выступает оператор сравнение п( User ) > 0. Здесь используется встроенная функция вычисляющая длину строки-аргумента. Строка 5 содержит код, обрабатывающий введенное значение; в данном случае оно просто высвечивается на экране с помощью процедуры MsgBox. Далее пользователь получает возможность ввести новое имя. Выражение Wend, расположенное в строке 7, заставляет компилятор вернуться к строке 4 программы и вновь проверить результат условного выражения. Если пользователь щелкнет на кнопке Cancel (Отмена) либо введет строку нулевой длины, выполнение цикла прервется, и управление будет передано строке, следующей за Wend. В противном случае строки кода 4 и 5 будут выполняться циклически. Помните о том, что ваш код должен корректно обрабаттвать обе ситуации и истинности, и ложности результата вычисления условного выражения. Легко составить такое условие, при котором цикл While . Wend будет выполняться бесконечно. Условное выражение вычисляется в начале цикла, и когда результат становится равным False, выполнение цикла завершается. Но если в качестве условия задать такое выражение, как, скажем, 1 = 1, результат будет всегда оставаться равным True. Ниже приведен пример бесконечного цикла. Sub infiniteLoopO While (1) MsgBox Это бесконечный цикл Wend End Sub ![]() Если вы попытаетесь выполнить данную процедуру, для остановки выполнения кода нажмите <Ctrl+Break>. Используйте эту комбинацию клавиш при работе в Access в случае, если какой-либо процесс окажется бесконечным. В языке предусмотрены специальные способы выхода из бесконечных циклов - мы расскажем о них в разделе Средства прертвания циклов , завершающем эту главу. Другие виды условных циклов Помимо управляющей структуры While . . . Wend, в вашем распоряжении имеются и другие средства организации циклических вычислений. Одно из них - конструкция Do ... Loop, которая может применяться в двух формах. Первая из них предполагает проверку условия в начале цикла, а другая - в конце него. Так выглядит синтаксис цикла Do ... Loop с начальной проверкой условия: Do [(While I Until} условное выражение] одна или несколько строк кода Д Loop Условное выражение, подлежащее тестированию, расположено в начале цикла, и конструкция действует почти так же, как и ранее рассмотренная структура While . .. Wend. Если применяется служебное слово While, сходство обеих структур становится полным. Служебное слово Until предполагает задание обратного по смыслу условного выражения - если с Do While использовалось, скажем, выражение на основе оператора сравнения больше (>), то в конструкции Do Until, выполняющей те же действия, придется употребить оператор меньше или равно (<=). т ▲ Поскольку условное выражение находится в начале цикла, не исключена ситуация, что код внутри цикла не выполнится ни разу. При использовании второй формы цикла Do . . . Loop, с проверкой условия в конце, код будет гарантированно выполнен, по меньшей мере, один раз. Синтаксис конструкции с последующим тестированием условного выражения выглядит так: Loop одна или несколько строк кода (While I Until} условное выражение] Как и ранее, допускается применять служебные слова While либо Until. При использовании Until не забудьте о необходимости обращения условного выражения. В принципе, варианты применения while или Until равнозначны - выбор того и иного из них зависит только от вас. Рассматривая конструкцию While . . . Wend, мы говорили, что результатом вычисления условия может быть как булево значение, так и величина типа Integer. To же справедливо и в отношении циклов формата Do ... Loop. Если вы намереваетесь тестировать целочисленные значения, имейте в виду, что 0 равносилен False, а любые ненулевые значения - True. Приведенный ниже листинг 5.5 представляет собой исправленный вариант листинга 5.4 и решает ту же задачу. Листинг 5.5. Пример использования Do 1: Su sers ( ) 2: Dim User 3 : Do 4; User от( Добавьте имя пользователя , Добавление пользователей , User ) MsgBox Добавление пользователя & User, vblnformation Loop Until (Len(User) = 0) End Sub Между двумя вариантами процедур, представленных в листингах 5.4 и 5.5, имеется ряд различий. Прежде всего, примите к сведению, что в листинге 5.5 функция InputBox вызывается только один раз. Но теперь возникает новая проблема - необходим дополнительный код, который гарантирует, что в строке 5, выполняющей обработку введенного имени, не будет приниматься во внимание последовательность нулевой длины. Условие из строки 4 листинга 5.4 переместилось в строку 5 листинга 5.5, но теперь здесь применяется оператор равенства - ведь мы воспользовались служебным словом Until. Применяя Until, не забудьте о необходимости обращения условного выражения. В листинге 5.6 приведен несколько усовершенствованный вариант цикла Do Loop, учитывающий возможные ошибки при вводе данных. Листинг 5.6. Исправленный вариант процедуры листинга 5.5 Su pDemo ( ) Dim User Do User ra( Добавьте имя пользователя , Добавление пользователей , User ) If (Len( User ) > 0) Then MsgBox Добавление пользователя & User, vblnformation End If Loop Until (Len( User ) = 0) End Sub Until
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |