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

Коллекция представляет собой набор элементов одного или разных типов. Обычно коллекции составляют из элементов управления, других объектов. Коллекция и сама является объектом (а почему бы и нет? – «коробки в коробке»). Коллекции всеядны, они позволяют иметь в одном наборе и кнопку, и метку, и строку, и переменную величину типа Integer.

      1. Создание коллекции, методы коллекции

Я рассмотрю распространенный случай, когда в коллекцию входят только элементы управления.

Задача: На вашей форме имеется несколько десятков кнопок, меток и текстовых полей, которые делают свое дело, скажем, помогают обрабатывать банковскую информацию. Глядя на них, можно сказать кто принес деньги, сколько принес, в долларах или рублях, сколько денег у него стало, сколько всего в банке денег и т.д. Вам нужно, чтобы иногда, в некоторые моменты выполнения программы, такие-то и такие-то кнопки, метки и текстовые поля из самых разных мест формы (всего, скажем, дюжина объектов) меняли цвет. Ну, скажем, для того, чтобы привлечь к себе ваше внимание. А в какие-нибудь другие моменты эта же самая дюжина должна делать что-нибудь другое, например, все кнопки из этой дюжины должны быть деактивированы, чтобы на них случайно не нажали. И так далее. В общем, эта дюжина иногда должна вести себя по-другому, чем остальные элементы управления.

Решение: Создадим проект. Для простоты разместим на форме только шесть элементов управления: Label1, TextBox1, Button1, Label2, TextBox2, Button2. Пусть в нашу «дюжину» входят из них только Label2, TextBox2, Button2.

Мы могли бы поместить нашу «дюжину» в рамку (GroupBox). Но рамка не обладает такой функциональностью, как коллекция. К тому же она требует пространственной отграниченности входящих в нее элементов управления от остальных.

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

Dim Моя_коллекция As New Collection 'Объявляем и создаем коллекцию

Коллекция объявлена, но пока она пуста, в ней нет ни одного элемента. Теперь будем по очереди добавлять объекты в коллекцию. Смотрим программу и пояснения к ней:

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

Dim Моя_коллекция As New Collection 'Объявляем и создаем коллекцию

Моя_коллекция.Add(Label2) 'Добавляем в коллекцию 1-й элемент

Моя_коллекция.Add(TextBox2, "Текстик") 'Добавляем в коллекцию 2-й элемент

Моя_коллекция.Add(Button2, "Кнопочка") 'Добавляем в коллекцию 3-й элемент

Debug.WriteLine(Моя_коллекция.Count) 'Печатается 3 - число элементов в коллекции

Debug.WriteLine(Моя_коллекция(2)) 'Печатаются сведения об объекте TextBox2

Debug.WriteLine(Моя_коллекция(1).Text) 'Печатается "Label2"

Моя_коллекция(3).Height = 80 'Задается высота кнопки Button2

Моя_коллекция("Текстик").Width = 100 'Задается ширина поля TextBox2

Dim i As Integer

For i = 2 To 3 'ДЛЯ 2 и 3 объекта

Debug.WriteLine(Моя_коллекция(i).Top) 'распечатывается вертикальная координата

Next

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

For Each Мой_объект In Моя_коллекция 'ДЛЯ КАЖДОГО объекта В коллекции:

Мой_объект.BackColor = Color.Yellow 'задается желтый цвет

Next

For Each Мой_объект In Моя_коллекция 'ДЛЯ КАЖДОГО объекта В коллекции:

If TypeName(Мой_объект) = "Button" Then 'если имя типа объекта - Button, то

Мой_объект.Enabled = False 'деактивировать ее

End If

Next

Моя_коллекция.Remove(2) 'Удаляем из коллекции 2-й элемент

Моя_коллекция.Remove("Кнопочка") 'Удаляем из коллекции кнопку

End Sub

Пояснения: У всех коллекций, как экземпляров класса Collection, есть несколько методов, три из них (Add, Remove, Count) я сейчас поясню.

При помощи метода Add мы добавляем в коллекцию элементы. При этом обязательно указывается имя элемента. Также удобно через запятую указать произвольную строку – ключ элемента, по которому можно к нему при желании обращаться, что мы и сделали в двух местах ("Текстик" и "Кнопочка"). Элементы, добавляемые в коллекцию, получают номера в том порядке, в котором их добавляли, начиная с 1 (а не с 0). Обращаться к отдельным элементам коллекции можно по полученному номеру (индексу) прямо как к элементу массива, а можно и по ключу, там, где он задан.

Как видите, здесь для добавления каждого элемента мы использовали отдельный оператор, хотя есть ситуации, когда можно это делать и в цикле.

Метод Count просто сообщает число элементов в коллекции.

Строки процедуры с 6 по 13 иллюстрируют обращение к элементам коллекции по индексу или по ключу, в том числе в цикле.

Чтобы удалить отдельный элемент из коллекции (не с формы), используется метод Remove с указанием индекса или ключа элемента.

Очевидно, что работа с коллекциями напоминает работу с одномерными массивами, в чем-то побогаче ее, а в чем-то и менее удобна.

В следующем подразделе мы продолжим пояснения нашего примера.