|
Программирование >> Проектирование интерфейса пользователя
Листинг 13.1. Примеры использования метода Add класса Collection 3 : 4: 5: 6: 7 : 8: 9 : 10: 11: 12: 14: 15: 16 Dim Strings As New Collection Вызов CO скобками Call Strings.Add( 1 ) Вызов без скобок Strings.Add 2 Call Strings.Add( 3 , три , , Call Strings.Add( 4 , четьре , MsgBox Strings.Item( три ) MsgBox Strings.Item( 1 ) Dim I As Integer For I = 1 To Strings.Count Debug.Print Strings.Item( I ) Next I Set Strings = Nothing : End Sub 2 ) три При вызове функции и присваивании возвращенного ею значения наличие скобок обязательно. Рекомендуется планомерно использовать скобки и при вызове функций, и при обращении к процедурам, хотя в последнем случае они необязательны. В строке 2 листинга выполняются одновременное объявление нового II объекта strings класса Collection и вгделение памяти для него посредством команды New. Строка 4 содержит самый простой вариант вызова метода Add: процедуре передается единственный аргумент - значение первого элемента коллекции - В строке 6 выполняется аналогичная операция, только без использования круглых скобок: в коллекцию добавляется второй элемент, 2 . Вызов процедуры Add в строке 7 включает уже три аргумента - содержимое очередного элемента его псевдоним ( Три ) и параметр 2, указывающий на номер элемента, после которого следует вставить новый (речь идет именно о параметре После, поскольку указана дополнительная запятая). Строка 8 предполагает вставку элемента 4 , снабженного именем Четыре , непосредственно перед элементом Три . Элементы 3 и 4 допускают обращение как с помощью значений индекса, так и посредством указания их псевдонимов. Строки 9 и 10 демонстрируют два варианта обращения к одному и тому же элементу, 3 , а строки 11 - 14 представляют конструкцию цикла, в котором содержимое каждого элемента коллекции Strings последовательно отображается в окне Immediate (рис. 13.2). Строка 15 определяет директиву очистки фрагмента памяти, занятого объектом коллекции (хотя, отметим, делать это необязательно, поскольку компилятор VBA выполняет подобные функции автоматически). Строка 16 завершает процедуру. Языки программирования Visual Basic for Applications и Java не требуют обязательного выполнения операций по освобождению фрагментов памяти, отведенных объектам. Компилятор решает подобные задачи, называемые сборкой мусора, автоматически. Впрочем, явное применение команды очистки памяти служит признаком завершения использования конкретного объекта и существенно уточняет и проясняет ваши намерения. Рекомендуем вам следовать таким принципам. I .P(& fitfii 1$ contacts (cHrtKti) js в MoAiK Cp.Lib Ccurars Datubase Cptap Ijjpllgit D::.rTi Szztafss As New CJtl-ctlflb Call Strlnos.AddI l > Call Strloga.AddrS , три , . 2} Call 5tiin5s-Add{-4 , четыре , три ) Dim I Ад Integer Fti I - 1 Tu ssjiuflj.rsiiat Debug.Print Strlcgs-Itemd) Next I Set Strings - Suthino End Sub Рис. 13.2. Так выглядит содержимое коллекции, построенной с помощью процедуры листинга 13.1 Удаление данных из коллекции Методу Remove передается единственный аргумент - значение индекса. В качестве индекса может задаваться целое число в интервале от 1 до значения, содержащегося в Count, либо строка, указывающая ключевое имя (псевдоним) элемента. Синтаксис вызова метода Remove таков: Cal отлекции.Remove( Индекс ) (Обращаясь к процедуре, указывайте служебное слово Call и круглые скобки. Во всех примерах последующих глав это правило соблюдается.) Назначение имени Имя-ОбъектаКоллекции пояснять не нужно. За ним, после оператора точки, следует название метода (Remove) и выражение индекса - целочисленное либо символьное. Если задано целое число, оно не должно выходить за границы интервала изменения индекса, а строка не может не совпасть с одним из ключевых имен элементов коллекции. (Пример использования метода Remove вы найдете ниже, в листинге 13.2.) Метод Item и свойство Count Свойство Count содержит значение количества элементов коллекции. На предыдущем занятии, изучая динамические массивы, предпринимались явные действия для установления размера массива и его увеличения. Аналогичные средства присутствуют и в классе коллекций. Подобное свойство объектов называют сокрытием данных или сокрытием функциональности. Теперь можно не заботиться о мелких деталях реализации, а полностью сосредоточить внимание на поставленной задаче. Метод Item предоставляет возможность доступа к элементу коллекции по заданному значению индекса или ключевого имени. О том, как пользоваться методом Item, вы узнаете, изучив текст листинга 13.2. Циклическая обработка элементов коллекции С циклической конструкцией For Each . Next вы ознакомились в главе 5-й час. Программирование управляющих структур . Коллекции - идеальный объект применения циклов For Each. Листинг 13.2 содержит примеры использования различных способов обработки данных в коллекции. Листинг 13.2. Подробный пример использования коллекций 1 2 3 4 5 6 7 8 9 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: Su ionDemo( ) Dim Strings As New Collection Call Strings.Add( Ho в столовой Call Strings.Add( y кошки Call Strings.Add{ даже } Call Strings.Add( хлеба ) Call Strings.Add( ни ) Call Strings.Add( крошки! Dim Str As Variant Dim Text As String For Each Str In Strings Text = Text & & Str Next Str Debug.Print Text Dim I As Integer For I = Strings.Count To 1 Debug.Print Удаляем: Call Strings.Remove(I Next I Set Strings = Nothing Step -1 & strings.Item(I) 21:End Sub Анализ II Строка 2 содержит конструкцию объявления коллекции Strings и выде-I ления памяти для нее. Важно помнить, что элементами коллекции могут служкить данные практически любых типов. В строках 3-8 выполняются операции добавления в коллекцию элементов типа string. В строке 9 объявляется переменная str типа Variant, а в строке 10 - символьная переменная Text. Цикл For Each требует использования переменной типа Variant. Str употребляется в роли приемника данных из очередного элемента коллекции, а строка Text в результате получает сумму всех элементов (фразу из рассказа Мыши, персонажа повести Льюиса Кэрролла Приключения Алисы в стране чудес) и затем (см. строку 14) отображается в окне Immediate. Строки 16-19 содержат цикл, на каждом шаге которого удаляется очередной элемент, начиная с последнего. Перед удалением элемента его содержимое отображается в окне Immediate. Команда в строке 20 выполняет очистку памяти. Если необходимо удалить все элементы коллекции, используйте обратный цикл. (При удалении очередного элемента значение Count уменьшается на единицу.) В противном случае, используя Count в качестве верхней границы диапазона изменения ин-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |