
Перечислимые циклы
В Visual Basic предусмотрен еще один вариант цикла, начинающегося с ключевых слов For Each. Это так называемый перечислимый тип цикла, поскольку он используется для обработки каждого элемента некоторого набора объектов. Наборы объектов могут храниться в виде коллекций.
В качестве одного из примеров коллекций можно привести коллекцию Printers. Это встроенная коллекция Visual Basic, в которой в виде объектов хранятся все установленные в системе принтеры. В приведенном ниже фрагменте программы цикл типа For Each используется для вывода значения свойства DeviceName всех системных принтеров.
Dim objPrinter As Printer
For Each objPrinter In Printers
Debug.Print objPrinter.DeviceName
Next objPrinter
В данном случае объектная переменная objPrinter выполняет роль переменной цикла, по аналогии со счетчиком для циклов типа For Next. В ней содержится ссылка на текущий обрабатываемый в цикле объект.
Циклы типа For Each можно также использовать для обработки элементов управления в форме, как показано ниже на примере.
Dim ctrl As Control ‘объявление переменной типа Control
For Each ctrl In frmMain ‘для каждого элемента управления в форме frmMain
If Left ( ctrl.Name , 3 ) = "txt" Then ‘если имя элемента управления начинается с "txt"
ctrl.BackColor = frmMain.BackColor
‘установить цвет фона элемента управления такой же, как и у формы frmMain
ctrl.Locked = True ‘заблокировать элемент управления
End If ‘конец условного оператора
Next ctrl ‘переход к следующему элементу управления
Приведённый фрагмент кода обращается ко всем элементам управления в форме frmMain и если имя элемента управления начинается с подстроки “txt” (все текстовые поля, если вы придерживаетесь соглашения о стандартных префиксах в именах элементов управления), то цвет фона элемента управления устанавливается таким же, как и у формы frmMain. Кроме того, все текстовые поля блокируются (пользователь не сможет изменить содержимое полей).