Опубликован: 31.08.2006 | Доступ: свободный | Студентов: 3975 / 230 | Оценка: 4.14 / 3.89 | Длительность: 39:16:00
ISBN: 978-5-9570-0021-3
Лекция 8:

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

< Лекция 7 || Лекция 8: 123456 || Лекция 9 >

Открытие файлов с помощью счетчика с большой областью видимости

Бывают ли ситуации, когда использование цикла For...Next не очень эффективно или не элегантно? Конечно. На самом деле предыдущий пример, хотя и полезен с точки зрения демонстрации, был несколько усложнен окном сообщения, которое открывалось в цикле For...Next четыре раза и отвлекало от формы, на которой необходимо сосредоточить внимание пользователя. Есть ли способ, с помощью которого можно отказаться от использования окна сообщения?

Одним из решений будет удаление как функции MsgBox, так и цикла For...Next, и использование вместо них переменной-счетчика, которая имеет область видимости для всей формы. Как вы узнали из "Переменные и операторы Visual Basic .NET" , можно объявить переменную с областью видимости во всей форме, поместив оператор Dim для этой переменной в самом начале кода формы в Редакторе кода - специальном месте над процедурами событий и сразу за разделом кода, сгенерированного Конструктором Windows Forms. В следующем упражнении вы будете использовать переменную Counter типа Integer, которая сохраняет свое значение между вызовами процедуры события Button1_Click, и использовать эту переменную для открытия тех же файлов значков, но без использования функции MsgBox, которая создает паузу между действиями.

Использование глобального счетчика
  1. С помощью Редактора кода найдите в проекте My For Loop Icons процедуру события Button1_Click.
  2. Поместите курсор перед процедурой события Button1_Click, и непосредственно после раздела кода, сгенерированного Конструктором Windows Forms, объявите переменную Counter типа Integer с помощью следующей записи:

    Dim Counter As Integer = 1

    Здесь вы поступили необычно - в дополнение к объявлению переменной Counter вы сразу же присвоили этой переменной значение 1. Это новая синтаксическая возможность Visual Studio .NET, и иногда она очень удобна. В Visual Basic 6 одновременное объявление и присвоение было запрещено.

  3. В процедуре события Button1_Click измените код так, чтобы он в точности соответствовал следующей группе операторов программы. Отсутствующие здесь операторы следует удалить.

    PictureBox1.Image = System.Drawing.Image.FromFile_
    ("c:\vbnet03sbs\Гл.7\face0" & Counter & ".ico")
    Counter += 1
    If Counter = 5 Then Counter = 1

    Я удалил объявление переменной i, оператора For...Next и функцию MsgBox, и изменил способ работы метода FromFile (заменил переменную i переменной Counter.) Также я добавил два новых оператора, которые используют переменную Counter. Первый оператор добавляет к Counter единицу ( Counter += 1 ), а второй сбрасывает значение переменной Counter, если оно стало 5. Такой сброс переменной позволит неограниченно долго циклически перебирать список файлов значков. Запись Counter += 1 является новой функцией краткой записи Visual Basic .NET - функциональным эквивалентом оператора

    Counter = Counter + 1
  4. Для запуска программы щелкните на кнопке Start (Начать).

    Примечание. Готовая программа Counter Variable лежит в папке c:\vbnet03sbs\Гл.7\counter variable.

    Программа запустится на выполнение в среде разработки.

  5. Щелкните несколько раз на кнопке Показать четыре рожицы. Обратите внимание, как выражение рожицы изменяется от мрачного до счастливого.


  6. Когда закончите, щелкните на кнопке Закрыть формы, чтобы остановить выполнение программы. Это решение более элегантно, чем в предыдущем примере, так как оно позволяет пользователю просто щелкать на одной кнопке, а не на кнопке формы и кнопке окна сообщения. Однако недостаток интерфейса первой программы не является следствием цикла For...Next, а лишь ограничением того, что процедура события Button1_Click использует только локальные переменные (другими словами, переменные, которые были объявлены в самой процедуре события). Между щелчками на кнопке эти локальные переменные теряют свое значение, и единственным способом заставить счетчик увеличиваться является создание цикла. Используя переменную типа Integer с большей областью видимости, я смог сохранить значение переменной Counter между щелчками и использовать это значение для отображения файлов в процедуре события Button1_Click.

Оператор Exit For

Большинство циклов For...Next выполняются до конца без каких-либо проблем, но иногда бывает нужно остановить работу цикла For...Next "досрочно" при выполнении некоторого условия. Такую возможность предоставляет использование оператора Exit For - специального оператора для досрочного завершения выполнения цикла For...Next и передачи управления на первый оператор, стоящий после этого цикла.

Например, следующий цикл For...Next запрашивает у пользователя 10 имен и отображает их одно за другим в текстовом поле до тех пор, пока пользователь не введет слово "Готово":

Dim i As Integer
Dim InpName As String
For i = 1 To 10
InpName = InputBox("Введите ваше имя или наберите Готово для выхода.")
If InpName = "Готово" Then Exit For
TextBox1.Text = InpName
Next i

Если пользователь вводит "Готово", то оператор Exit For завершает цикл, и выполнение продолжается с оператора, стоящего после Next.

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

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