Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Dim Игра(1 To 30) As типИграСодержание книги
Поиск на нашем сайте
Теперь можно использовать операторы: Игра(16).Название = "StarCraft" 'название 16-й игры Игра(8).Персонаж(12) = "Солдат" 'двенадцатый персонаж восьмой игры Debug.Print Игра(16).Название, Игра(8).Персонаж(12)
Еще усложним задание: Вы хотите задать более подробную информацию о персонажах, а не только их имя. Вас интересует имя персонажа, количество его здоровья (в численном виде), название его оружия. Для этого вы определяете еще один пользовательский тип. Вот программа: 'Сначала создаем пользовательский тип персонажа, 'так как без него нельзя определить пользовательский тип игры: Private Type типПерсонаж Имя As String Здоровье As Integer Оружие As String End Type 'Затем создаем пользовательский тип игры: Private Type типИгра Название As String Объем As Integer Графика_хорошая As Boolean Персонаж(1 To 20) As типПерсонаж 'Не больше 20 персонажей в одной игре End Type 'Отводим в памяти место под информацию об играх: Dim Игра(1 To 30) As типИгра
Private Sub Form_Load() Игра(8).Персонаж(12).Имя = "Солдат" Игра(8).Персонаж(12).Здоровье = 140 Debug.Print Игра(8).Персонаж(12).Имя, Игра(8).Персонаж(12).Здоровье End Sub
Если вы захотите более подробно описать оружие, то можете создать еще один пользовательский тип. И так далее. Массивы и пользовательские типы могут вкладываться друг в друга, как матрешки, до бесконечности. Так создаются иерархии данных практически в любой области знаний.
Задание 121: Создайте базу данных о своих родственниках. О каждом родственнике должно быть известно: · Имя · Год рождения · Цвет глаз Массивы не используйте. Программа должна: · Распечатать ваш возраст и цвет глаз · Ответить на вопрос – правда ли, что ваш дядя старше тети.
Задание 122: Создайте базу данных о своих однокашниках. О каждом однокашнике должно быть известно: · Фамилия · Имя · Пол · Год рождения Обязательно используйте массив не меньше, чем из 10 записей. Программа должна: · Вычислить средний возраст ваших однокашников · Определить, кого среди них больше – дам или кавалеров · Ответить на вопрос – есть ли в вашей базе тезки (это нелегко).
Базы данных являются настолько распространенным средством хранения информации, что в Visual Basic есть специальные мощные инструменты для работы с ними. Мы рассмотрим их в Глава 22. Коллекции Объектные переменные В предыдущих разделах вы видели, что значением переменной величины может быть сложная структура данных. Но переменная может иметь своим значением и еще более сложную вещь - объект. Понятие объекта - сложное понятие программирования. Частными случаями объектов в Visual Basic являются формы и элементы управления. Исчерпывающее описание работы объектов выходит за рамки курса для начинающих. В этой главе мы только вскользь знакомимся с ними. В Глава 20 я попытался дать основные понятия об этой области программирования. В Visual Basic существует несколько типов, к которым может принадлежать объект. Самый общий тип - это Object. Если мы напишем Dim A As Object, то переменная A сможет принимать значения любых объектов. В нижеприведенном примере она сначала принимает значение метки, а затем формы. Для того, чтобы присвоить переменной значение существующего объекта, простой оператор присваивания не подходит, нужно писать так: Set A = Label1. Создайте проект с меткой. Private Sub Command1_Click() Dim A As Object Set A = Label1 A.FontSize = 20 A.Caption = "Привет!" 'Меняется надпись на метке Set A = Form1 A.Caption = "Еще один привет!" 'Меняется надпись на форме End Sub Вы видите, что как только мы присвоили переменной A значение метки Label1, мы смогли вместо Label1.FontSize = 20 писать A.FontSize = 20. Объектный тип Control - это тип элементов управления. Если мы напишем Dim A As Control, то переменная A сможет принимать значения не любых объектов, а только элементов управления. Зачем все это нужно? Один из примеров применения объектной переменной вы найдете чуть ниже в этом же разделе, где объектная переменная в цикле пробегает значения элементов управления на форме. Другой пример, когда объект является параметром процедуры, вы найдете в 17.7. Коллекции Коллекции так же относятся к пользовательским типам данных, как массивы элементов управления к массивам переменных величин. Коллекция- это набор элементов разного типа, таких как элементы управления, другие объекты. Коллекция и сама является объектом (а почему бы и нет? - коробки в коробке). Коллекции всеядны, они позволяют иметь в одном наборе и кнопку и метку и переменную величину типа Integer. Я ограничусь распространенным случаем, когда в коллекцию входят только элементы управления. Задача: На вашей форме имеется несколько десятков кнопок, меток и текстовых полей, которые делают свое дело, скажем, помогают обрабатывать банковскую информацию - кто принес деньги, сколько принес, в долларах или рублях, да сколько денег у него стало, да сколько всего в банке денег и т.д. Вам нужно, чтобы в некоторый момент выполнения программы такие-то и такие-то кнопки, метки и текстовые поля из самых разных мест формы (всего, скажем, дюжина объектов) поменяли размер шрифта. Ну, скажем, для того, чтобы привлечь к себе внимание. А в какой-нибудь другой момент эта же дюжина должна сделать что-нибудь другое, например, кнопки из этой дюжины должны быть деактивированы, чтобы на них случайно не нажали. И так далее. Решение: Создадим проект. Для простоты разместим на форме только шесть элементов управления: Label1, Text1, Command1, Label2, Text2, Command2. Пусть в нашу "дюжину" входят из них только Label2, Text2, Command2. Программным путем создадим коллекцию из этих объектов. Для этого сначала придумаем ей имя Моя_коллекция и объявим ее так: Dim Моя_коллекция As New Collection Слово Collection означает коллекцию. Слово New мы пишем тогда, когда создаем новый объект (а коллекция - объект). Коллекция объявлена, но пока она пуста. Теперь будем по очереди добавлять объекты в коллекцию подобно тому, как в 13.6 мы добавляли объекты в массив. Но здесь другая грамматика. Смотрим программу: Dim Моя_коллекция As New Collection 'Объявляем коллекцию
Private Sub Command1_Click() Моя_коллекция .Add Label2 'Добавляем в коллекцию 1-й элемент Моя_коллекция .Add Text2, "Текстик" 'Добавляем в коллекцию 2-й элемент Моя_коллекция .Add Command2, "Кнопочка" 'Добавляем в коллекцию 3-й элемент
Debug.Print Моя_коллекция .Count 'Печатается 3 - число элементов в коллекции Debug.Print Моя_коллекция (1). Caption 'Печатается "Label2" Моя_коллекция (3). Height = 800 'Задается высота кнопки Command2 Моя_коллекция ("Текстик"). BackColor = vbYellow 'Задается цвет поля Text2
For Each Мой_объект In Моя_коллекция 'ДЛЯ КАЖДОГО объекта В коллекции Мой_объект.FontSize = 18 'задается размер шрифта Next
For Each Мой_объект In Моя_коллекция 'ДЛЯ КАЖДОГО объекта В коллекции If TypeName (Мой_объект) = "CommandButton" Then 'если имя типа объекта - CommandButton, то Мой_объект.Enabled = False 'деактивировать ее End If Next
Моя_коллекция. Remove 2 'Удаляем из коллекции второй элемент Моя_коллекция. Remove "Кнопочка" 'Удаляем из коллекции кнопку End Sub Пояснения: У коллекций есть несколько методов, три из них (Add, Remove, Count) я сейчас поясню: При помощи метода Add мы добавляем в коллекцию элементы. При этом обязательно указывается имя элемента. Также можно через запятую указать произвольную строку - ключ элемента, по которому можно к нему при желании обращаться, что мы и сделали в программе. Как видите, здесь для добавления каждого элемента мы использовали отдельный оператор, хотя есть ситуации, когда можно это делать в цикле. Метод Count просто сообщает число элементов в коллекции: Обращаться к отдельным элементам коллекции можно по индексу, как к элементу массива, а можно и по ключу, там, где он задан. Чтобы удалить отдельный элемент из коллекции (не с формы), используется метод Remove с указанием индекса или ключа элемента.
Для коллекций удобно применять специальную разновидность оператора цикла - For Each. Для этого необходимо придумать имя переменной величине, значение которой будет пробегать все элементы коллекции. Мы придумали имя Мой_объект. Когда цикл выполняется в первый раз, Мой_объект "равняется" 1-му элементу коллекции, во второй раз - 2-му и т.д., пока элементы не будут исчерпаны. В остальном синтаксис и порядок выполнения оператора For Each такой же, как и у привычного нам For. Здесь я не объвлял переменную Мой_объект, а мог бы и объявить - Dim Мой_объект As Control. Здесь мы использовали функцию TypeName, чтобы выбрать из всех элементов коллекции только элементы данного типа. Пояснять ее я не буду, используйте дальше по аналогии. Вообще, вы чувствуете, что с этими коллекциями мы ступили на зыбкую для нас почву работы с объектами? Зыбкая она потому, что мы пока про работу с объектами почти ничего не знаем. Ну что ж, получше узнаем мы ее в Глава 20, а пока вам хватит того, что вы уже узнали.
Кстати, оператор For Each можно использовать и при работе с массивами. Рамка (Frame) Рамка объединяет в себе разнотипные элементы управления. В этом рамка похожа на коллекцию. Но у рамок несколько иное назначение, чем у коллекций. Поместите на форму элемент управления Frame, придав ему довольно большие размеры. Затем возьмите из Toolbox и поместите внутрь этой рамки несколько других элементов управления, в том числе еще один Frame. А теперь передвиньте рамку по форме. Вы видите, что объекты внутри рамки передвинулись вместе с ней. Посмотрите на значения свойств Top и Left любого объекта внутри рамки. Теперь это координаты не относительно формы, а относительно рамки. Если вы захотите мышкой переместить в рамку уже размещенный на форме объект, у вас ничего не получится. Оказавшись внутри границ рамки, он не стал "своим". Убедитесь в этом, сдвинув рамку в сторону. Все уехали, объект остался на месте. Чтобы добиться желаемого, вырежьте (Cut) объект со старого места и наклейте (Paste) в рамку. Аналогичная ситуация, когда вы попытаетесь обнять новой или старой рамкой уже существующие объекты.
Рамка является удобным средством объединения элементов управления по смыслу. Пример:
В программе вы можете изменять значения свойств рамки Top, Left. Объекты, объединенные в рамке, будут при этом перемещаться вместе с ней. Вы можете изменять значения свойств рамки Visible, Enabled. При этом точно так же будут меняться значения этих свойств всех объектов, объединенных в рамке. Это полезно тогда, когда у вас на форме слишком много объектов и все они свободно не умещаются на ней. Вас может выручить то, что не все они нужны одновременно. Разделите их между наложенными друг на друга рамками и в каждый момент времени делайте видимой только одну из них.
Поэкспериментируйте с цветами, границей, шрифтом рамки.
Способностями, аналогичными рамке, обладает и объект PictureBox. Проверьте - в нем точно так же можно размещать элементы управления. Мы знаем и еще один такой объект. Это, конечно же, сама форма. Все подобные объекты называются контейнерами.
|
||||
Последнее изменение этой страницы: 2016-08-12; просмотров: 251; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.218.176 (0.009 с.) |