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

Использование массивов и коллекций для управления данными

Использование свойства Name в цикле For Each ... Next

Если вы хотите обработать один или несколько членов коллекции отдельно от остальных, используйте свойство Name, которое однозначно определяет каждый объект формы. В этой книге вы периодически устанавливали свойство Name, чтобы сделать программу читаемой, но свойство Name также можно использовать для идентификации конкретных объектов вашей программы.

Чтобы использовать свойство Name подобным образом, выделите объекты, которые вы хотите обработать, а затем отметьте их свойства Name. При переборе объектов формы в цикле For Each...Next используйте необходимое количество операторов If для проверки важного свойства Name, и обработайте эти объекты особым способом. Например, предположим, что вы хотите создать цикл For Each...Next, который перемещает объект по форме медленнее, чем все остальные объекты. Можно использовать оператор If...Then для нахождения свойства Name медленного объекта, а затем перемещать этот объект на более короткие дистанции, увеличивая его свойство Left не так сильно, как вы делаете это для других объектов.

Совет. Если вы планируете использовать в цикле For Each...Next специальную обработку для нескольких объектов, то вместе с оператором If...Then вы можете использовать операторы ElseIf или структуру выбора Select Case.

В следующем упражнении вы будете проверять свойство Name третьего объекта кнопки ( btnMoveObjects ) и обрабатывать ее в цикле For Each...Next особым образом. В конечном счете, вы получите процедуру события, которая перемещает вправо первые две кнопки, но оставляет на месте третью кнопку.

Совет. В дополнение к свойству Name большинство объектов имеют свойство Tag. Аналогично свойству Name свойство Tag - это место, где можно сохранять строковые данные касающиеся объекта. Свойство Tag по умолчанию пусто, но вы можете присвоить ему некую информацию и проверять ее для однозначной идентификации объектов вашей программы, которые вы хотите обрабатывать особым образом.
Использование свойства Name для специальной обработки элемента управления из коллекции Controls
  1. Отобразите форму, а затем сделайте двойной щелчок мышью на объекте третьей кнопки. В Редакторе кода появится процедура события btnMoveObjects_Click. Помните, что в предыдущем примере вы изменили свойство Name этого объекта с Button3 на btnMoveObjects.
  2. Введите в этой процедуре события следующий код программы:

    For Each ctrl In Controls
      If ctrl.Name <> "btnMoveObjects" Then
        ctrl.Left = ctrl.Left + 25
      End If
    Next

    Новой функцией этого цикла For Each...Next является оператор If...Then, который проверяет каждый член коллекции и смотрит, не равно ли его свойство Name значению btnMoveObjects. Если цикл находит этот маркер, он пропускает объект, не перемещая его. Заметьте, что, как и в предыдущем примере, переменная ctrl была объявлена в верхней части формы как переменная типа Control с областью видимости, распространяющейся на всю форму.

  3. Щелкните на кнопке Save All (Сохранить все) стандартной панели инструментов.
  4. Щелкните на кнопке Start (Начать). Программа запустится, и в форме появятся три объекта ее интерфейса.

    Примечание. Готовая программа Controls Collection расположена в папке c:\vbnet03sbs\Гл.11\controls collection.
  5. Щелкните шесть или семь раз на третьем объекте кнопки. Каждый раз при щелчке на этой кнопке объекты формы перемещаются по экрану. Однако третья кнопка остается на своем месте, как показано на следующем рисунке.


    Специальная обработка одного объекта в коллекции может быть очень полезна. В этом случае использование свойства Name в цикле For Each...Next улучшает читаемость кода программы, предлагая многочисленные способы применения его для игр и графических программ. Когда вы будете использовать остальные типы коллекций Visual Basic, не забывайте о свойстве Name.

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

Создание собственных коллекций

Visual Basic позволяет создавать собственные коллекции для хранения данных программы и их систематической обработки. Хотя коллекции часто создаются для хранения объектов, таких как элементы управления интерфейса пользователя, их также можно использовать для хранения числовых или строковых значений. В этом случае коллекции прекрасно дополняют возможности массивов, о которых шла речь в начале этой лекции.

Новые коллекции объявляются в программе как переменные, и место, в котором вы их объявляете, определяет их область видимости, или область, в которой они сохраняют свои значения. Так как коллекции очень полезны, я обычно объявляю их в верхней части формы или в стандартном модуле. Новые объявления коллекций требуют записи

Dim Имя_коллекции  As New Collection()

где Имя_коллеции - это имя вашей коллекции. Если вы помещаете объявление коллекции в стандартном модуле, то вместо ключевого слова Dim следует использовать ключевое слово Public. После того, как вы создали коллекцию, с помощью метода Add в нее можно добавить ее члены, и узнать содержимое отдельных ее членов с помощью цикла For Each...Next.

В следующем упражнении показано, как создать коллекцию для хранения строковых данных, представляющих интернет-адреса (URL), которые вы недавно использовали. Для соединения с сетью программа будет использовать метод Visual Basic с именем System.Diagnostics.Process.Start и ваш веб-браузер по умолчанию.

Жанболат Шаймерден
Жанболат Шаймерден

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

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Светлана Ведяева
Светлана Ведяева
Россия, Саратов