Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Private Type типПерсонаж

Процедуры с параметрами | Рисуем_мой_значок 200, 400, RGB(100, 250, 150) | Тип данных Date | Private Sub Включить_сигнал_будильника() | Работа с мышью | Работа с клавиатурой | Проект - Гонки (игра) | Одномерные массивы переменных величин | Использование массивов при программировании игр | Массивы элементов управления |


Читайте также:
  1. A PRIVATE FUNCTION
  2. A Private Tutor
  3. Access to private and protected members of the containing type
  4. Aims of Private Organizations
  5. Broad government access to private data: Perhaps someday
  6. Chapter VI. SOAMES’ PRIVATE LIFE
  7. CLOSED FOR PRIVATE FUNCTION

Имя 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 можно использовать и при работе с массивами.


Дата добавления: 2015-11-16; просмотров: 50 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Пользовательский тип данных| Рамка (Frame)

mybiblioteka.su - 2015-2024 год. (0.01 сек.)