Циклы и таймеры
В этой лекции вы узнаете, как:
- использовать цикл For...Next для многократного повторения операторов;
- отображать вывод в многострочном текстовом поле с помощью конкатенации строк;
- использовать цикл Do для выполнения операторов до тех пор, пока не выполнится заданное условие;
- использовать объект таймера для выполнения кода в заданное время;
- создать собственные цифровые часы и утилиту для работы с паролями, имеющими срок действия.
В этой лекции вы узнаете, как многократно исполнять блок операторов с помощью циклов. Для исполнения операторов заданное число раз вы будете использовать цикл For...Next, а для исполнения операторов до тех пор, пока не выполнится условное выражение - цикл Do. Вы также узнаете, как с помощью оператора конкатенации строк (&) выводить в объекте текстового поля более одной строки текста. Наконец, вы узнаете, как для исполнения кода вашей программы через заданные интервалы времени использовать объект таймер.
Что нового в Visual Basic .NET?
- В Visual Basic 6 с помощью метода Print вы могли выводить текст непосредственно в форму - это было наследием оператора Print из GW-BASIC и Microsoft QuickBasic. В Visual Basic .NET метод Print может использоваться только для записи данных на диск. В этой лекции показан альтернативный метод вывода в форме больших фрагментов текста - в объекте многострочного текстового поля с помощью оператора конкатенации строк (&).
- В Visual Basic 6 цикл While был определен с помощью следующего синтаксиса: While...Wend. В Visual Basic .NET закрывающий оператор изменился на While...EndWhile, чтобы быть больше похожим на другие аналогичные структуры.
- Элемент управления Timer в Visual Basic .NET аналогичен, но не идентичен элементу управления Timer из Visual Basic 6. Например, процедура события Timer1_Timer (которая исполняется через каждый предустановленный интервал времени) была в Microsoft Visual Studio .NET переименована в Timer1_Tick. В дополнение к этому, вы больше не можете отключать таймер установкой его свойства Interval на значение 0.
Циклы For ... Next
С помощью цикла For...Next вы можете выполнять группу операторов программы в процедуре события или модуле кода заданное число раз. Этот подход полезен в том случае, если вы выполняете несколько связанных вычислений, работаете с элементами на экране или обрабатываете несколько фрагментов данных, введенных пользователем. Цикл For...Next является на самом деле просто кратким способом записать длинный список операторов программы. Так как каждая группа операторов в таком списке будет делать одно и то же, Visual Basic позволяет определить одну такую группу операторов и выполнить ее столько раз, сколько вы захотите.
Синтаксис цикла For...Next имеет следующий вид:
For переменная = начальное_значение To конечное_ значение повторяемые операторы Next [переменная]
В этом описании синтаксиса For, To и Next - это обязательные ключевые слова, оператор присвоения (=) также обязателен. Вы должны заменить переменная именем числовой переменной, которая хранит текущее значение счетчика циклов (переменную после Next указывать необязательно), а начальное_значение и конечное_значение заменить числовыми значениями, представляющими начальную и конечную точки цикла. (Заметьте, что вы должны объявить переменную до того, как станете использовать ее в операторе For...Next.) Строка или строки между операторами For и Next - это операторы, которые повторяются при каждом исполнении цикла.
Например, следующий цикл For...Next воспроизводит в виде быстрой последовательности четыре звуковых сигнала:
Dim i As Integer For i = 1 To 4 Beep() Next i
Этот цикл эквивалентен написанию в процедуре оператора Beep четыре раза. Компилятор воспринимает его точно так же, как и
Beep() Beep() Beep() Beep()
Переменная, используемая в цикле - это i, единственная буква, которая, по соглашению, обозначает первый счетчик цикла For...Next и объявляется как переменная типа Integer. При каждом исполнении цикла переменная счетчика увеличивается на единицу. (При первом проходе через цикл переменная содержит значение 1 - значение, заданное параметром начальное_значение; при последнем проходе она содержит значение 4 - конечное_значение.) Как вы увидите в следующих примерах, в циклах можно эффективно использовать эту переменную-счетчик.
Отображение переменной-счетчика в элементе управления TextBox
Переменная-счетчик аналогична любой другой переменной процедуры события. Ее значение может быть присвоено свойству, использовано в вычислениях или отображено в программе. Одним из практических применений переменной-счетчика является ее отображение в элементе управления TextBox. Ранее в этой книге вы использовали элемент управления TextBox для отображения одной строки, но в этой лекции вы будете выводить в элемент управления TextBox несколько строк текста. Фокус при отображении более чем одной строки заключается в том, что вы просто устанавливаете свойство Multiline элемента управления TextBox на значение True, а свойство ScrollBars - на значение Vertical. При использовании этих простых настроек объект однострочного текстового поля становится объектом многострочного текстового поля с полосами прокрутки для облегчения доступа к нему.
Отображение информации с помощью цикла For ... Next
- Запустите Visual Studio и создайте в папке c:\vbnet03sbs\Гл.7 новый проект Windows Application (Приложение Windows) на Visual Basic с именем My For Loop. В Windows Forms Designer (Конструкторе Windows Forms) появится пустая форма. Прежде всего вы добавите в форму элемента управления Button, но на этот раз новым способом.
- Дважды щелкните мышью в окне области элементов на элементе управления Button (он находится на закладке Windows Forms). Visual Studio поместит объект кнопки в верхний левый угол формы. В случае с элементом управления Button, а также и со многими другими, двойной щелчок мышью позволяет быстро создать в форме объект со стандартными размерами. Теперь можно перетащить этот объект кнопки в нужное место и настроить его свойства.
- Перетащите объект кнопки вправо и поместите его в центре верхней части формы.
- Откройте окно Properties (Свойства), а затем установите свойство Text кнопки на значение Цикл.
- В области элементов щелкните дважды на элементе управления TextBox. Visual Studio создаст небольшое текстовое поле.
- Установите свойство Multiline этого объекта текстового поля на значение True, а свойство ScrollBars на значение Vertical. Эти настройки подготавливают текстовое поле к отображению более чем одной строки текста.
- Сделайте свойство Text объекта текстового поля пустым (empty).
- Переместите текстовое поле под кнопку и увеличьте его так, чтобы оно заняло большую часть формы.
- Щелкните дважды на кнопке Цикл формы. В Редакторе кода появится процедура события Button1_Click.
-
Введите в этой процедуре следующие операторы программы:
Dim i As Integer Dim Wrap As String Wrap = Chr(13) & Chr(10) For i = 1 To 10 TextBox1.Text = TextBox1.Text & "Строка " & i & Wrap Next i
Эта процедура события объявляет две переменные - одну типа Integer (i), а вторую - типа String (Wrap), а затем присваивает второй переменной строковое значение, представляющее символ перевода строки. В терминах программирования символ перевода строки является эквивалентом нажатия на клавишу (Enter) на клавиатуре. Чтобы сделать его менее громоздким, я создал для этого символа специальную переменную, которая состоит из элементов "возврат каретки" (return) и "прокрутка строки" (linefeed).
После объявления переменной и присвоения, я использую цикл For...Next для десятикратного отображения в объекте текстового поля строки "Строка X", где X - это текущее значение переменной-счетчика (другими словами, со "Строка 1" до "Строка 10"). Символы конкатенации строк (&) объединяют в текстовом поле части каждой строки воедино. В начале в объект добавляется все значение текстового поля, которое хранится в свойстве Text, так, что предыдущие строки при добавлении новых не удаляются. Затем для отображения новой строки и перевода курсора влево и на следующую строку объединяются строка "Строка", текущий номер строки и символ возврата каретки (Wrap). Оператор Next завершает цикл.
Обратите внимание, что Visual Studio автоматически добавляет оператор Next в конец цикла, когда вы вводите For в его начале. В данном случае я отредактировал оператор Next так, чтобы включить в него имя переменной i - это необязательное пояснение синтаксиса, которое мне нравится использовать.
- Чтобы сохранить изменения, щелкните на кнопке Save All (Сохранить все) на стандартной панели инструментов. Теперь запустите эту программу.
- Щелкните на кнопке Start (Начать) стандартной панели инструментов.
-
Щелкните на кнопке Цикл.
Примечание. Готовая программа For Loop находится в папке c:\vbnet03sbs\ Гл.7\for loop.
Цикл For...Next отображает в текстовом поле 10 строк, как показано ниже.
-
Снова щелкните на кнопке Цикл. Цикл For...Next отображает в форме еще 10 строк, и вы можете увидеть невидимые строки, используя вертикальную полосу прокрутки. При каждом повторении цикла он добавляет в объект текстового поля 10 новых строк.
Совет. Боитесь, что в объекте текстового поля не останется места? Если вы отображаете только 10 строк, это случится очень нескоро. Объект многострочного текстового поля имеет практическое ограничение на размер текста в 32 Кб. Для текстов большего объема или для форматирования попробуйте использовать элемент управления RichTextBox.
-
Чтобы завершить выполнение программы, щелкните на кнопке Закрыть формы.
Совет. Если требуется исполнять набор операторов много раз, цикл For...Next значительно упростит ваш код и уменьшит общее число операторов, которые нужно вводить. В предыдущем примере цикл For...Next длиной в три строки выполнил ту же работу, что и его десятистрочный эквивалент без использования цикла.