Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Понятно о Visual Basic.NET. Самоучитель.Ч2.2005...docx
Скачиваний:
46
Добавлен:
25.11.2019
Размер:
4.02 Mб
Скачать
      1. Оператор цикла For Each

Работа For Each с коллекциями. Для коллекций удобно применять специальную разновидность оператора цикла – For Each. Для этого необходимо придумать имя переменной цикла, значение которой будет пробегать все элементы коллекции. Мы придумали имя Мой_объект. Надо объявить переменную цикла так, чтобы ее тип подходил для всех элементов коллекции. Поскольку в нашей коллекции одни только элементы управления, мы объявили так:

Dim Мой_объект As Control

хотя могли и так:

Dim Мой_объект As Object

Ведь тип Object всеяден. Но чем более конкретный тип мы указываем, тем удобнее работать.

Когда цикл выполняется в первый раз, Мой_объект «равняется» одному элементу коллекции, во второй раз – другому и т.д., пока элементы не будут исчерпаны. В остальном синтаксис и порядок выполнения оператора For Each такой же, как и у привычного нам For. К нему также можно применять оператор Exit For.

Мы использовали функцию TypeName, чтобы выбрать из всех элементов коллекции элементы только данного типа. Пояснять ее я не буду, используйте дальше по аналогии.

Работа For Each с массивами. Оператор For Each никто не запрещал использовать и при работе с массивами. Вот пример:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim a() As Integer = {10, 11, 12, 13, 14}

Dim Элемент As Integer

For Each Элемент In a

Debug.WriteLine(Элемент)

Next

End Sub

Напечатает эта процедура вот что:

10

11

12

13

14

      1. Коллекции, принадлежащие контейнерам

Мы знакомы с такими объектами, как форма, рамка, панель, вкладка. Каждый из них может включать в себя другие элементы управления. Поэтому такие объекты называются контейнерами. У контейнера есть собственная коллекция, в которую автоматически заносятся элементы управления, входящие в контейнер. Поэтому специально заботиться о добавлении их в контейнер не нужно. Коллекция формы называется Controls. Коллекция рамки GroupBox1 является ее свойством Controls, поэтому к ней можно обращаться так: GroupBox1.Controls. К коллекции панели Panel1 можно обращаться так: Panel1.Controls и т.д. Пример:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim Объект As Control

For Each Объект In Controls

Debug.WriteLine(Объект.Text)

Next

For Each Объект In Panel1.Controls

Debug.WriteLine(Объект.Text)

Next

End Sub

Во вкладках элементы управления принадлежат страницам вкладки. У каждой страницы – своя коллекция элементов управления. Пусть во вкладке TabControl1 имеется три страницы: TabPage1, TabPage2 и TabPage3. Тогда фрагмент

For Each Объект In TabPage2.Controls

Debug.WriteLine(Объект)

Next

распечатает элементы управления, находящиеся на 2-й странице. Сами страницы составляют коллекцию, принадлежащую вкладке. Поэтому фрагмент

For Each Объект In TabControl1.Controls

Debug.WriteLine(Объект.Name)

Next

распечатает имена всех страниц вкладки:

TabPage1

TabPage2

TabPage3

Получается коллекция в коллекции. Матрешка. Поэтому сработает такой оператор:

Debug.WriteLine(TabControl1.Controls(1).Controls(2))

Здесь распечатывается элемент управления, стоящий под номером 2 в коллекции элементов управления, принадлежащей некой странице. А страница эта стоит под номером 1 в коллекции страниц, принадлежащей вкладке TabControl1.