Опубликован: 31.08.2006 | Уровень: специалист | Доступ: свободно
Лекция 8:

Циклы и таймеры

< Лекция 7 || Лекция 8: 123456 || Лекция 9 >
Аннотация: В этой лекции вы узнаете, как многократно исполнять блок операторов с помощью циклов; как с помощью оператора конкатенации строк (&) выводить в объекте текстового поля более одной строки текста и как для исполнения кода вашей программы через заданные интервалы времени использовать объект таймер

В этой лекции вы узнаете, как:

  • использовать цикл 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
  1. Запустите Visual Studio и создайте в папке c:\vbnet03sbs\Гл.7 новый проект Windows Application (Приложение Windows) на Visual Basic с именем My For Loop. В Windows Forms Designer (Конструкторе Windows Forms) появится пустая форма. Прежде всего вы добавите в форму элемента управления Button, но на этот раз новым способом.
  2. Дважды щелкните мышью в окне области элементов на элементе управления Button (он находится на закладке Windows Forms). Visual Studio поместит объект кнопки в верхний левый угол формы. В случае с элементом управления Button, а также и со многими другими, двойной щелчок мышью позволяет быстро создать в форме объект со стандартными размерами. Теперь можно перетащить этот объект кнопки в нужное место и настроить его свойства.
  3. Перетащите объект кнопки вправо и поместите его в центре верхней части формы.
  4. Откройте окно Properties (Свойства), а затем установите свойство Text кнопки на значение Цикл.
  5. В области элементов щелкните дважды на элементе управления TextBox. Visual Studio создаст небольшое текстовое поле.
  6. Установите свойство Multiline этого объекта текстового поля на значение True, а свойство ScrollBars на значение Vertical. Эти настройки подготавливают текстовое поле к отображению более чем одной строки текста.
  7. Сделайте свойство Text объекта текстового поля пустым (empty).
  8. Переместите текстовое поле под кнопку и увеличьте его так, чтобы оно заняло большую часть формы.
  9. Щелкните дважды на кнопке Цикл формы. В Редакторе кода появится процедура события Button1_Click.
  10. Введите в этой процедуре следующие операторы программы:

    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 - это необязательное пояснение синтаксиса, которое мне нравится использовать.

  11. Чтобы сохранить изменения, щелкните на кнопке Save All (Сохранить все) на стандартной панели инструментов. Теперь запустите эту программу.
  12. Щелкните на кнопке Start (Начать) стандартной панели инструментов.
  13. Щелкните на кнопке Цикл.

    Примечание. Готовая программа For Loop находится в папке c:\vbnet03sbs\ Гл.7\for loop.

    Цикл For...Next отображает в текстовом поле 10 строк, как показано ниже.


  14. Снова щелкните на кнопке Цикл. Цикл For...Next отображает в форме еще 10 строк, и вы можете увидеть невидимые строки, используя вертикальную полосу прокрутки. При каждом повторении цикла он добавляет в объект текстового поля 10 новых строк.

    Совет. Боитесь, что в объекте текстового поля не останется места? Если вы отображаете только 10 строк, это случится очень нескоро. Объект многострочного текстового поля имеет практическое ограничение на размер текста в 32 Кб. Для текстов большего объема или для форматирования попробуйте использовать элемент управления RichTextBox.

  15. Чтобы завершить выполнение программы, щелкните на кнопке Закрыть формы.

    Совет. Если требуется исполнять набор операторов много раз, цикл For...Next значительно упростит ваш код и уменьшит общее число операторов, которые нужно вводить. В предыдущем примере цикл For...Next длиной в три строки выполнил ту же работу, что и его десятистрочный эквивалент без использования цикла.

< Лекция 7 || Лекция 8: 123456 || Лекция 9 >
Сайдахмад Зарипов
Сайдахмад Зарипов
Жанболат Шаймерден
Жанболат Шаймерден

Можно ли выбирать язык для надписей и команд в среде разработки?

Андрей Гуменюк
Андрей Гуменюк
Молдова