|
Программирование >> Проектирование интерфейса пользователя
Хотите немного покружиться? 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.001
При копировании материалов приветствуются ссылки. |