Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatics.doc
Скачиваний:
6
Добавлен:
21.08.2019
Размер:
1.33 Mб
Скачать

If X  0 Then

MsgBox("Отрицательное основание"): END

Else

z = x ^ y

Label3.Caption = T & "x ^ y" & S & Str$(z)

End If

End Select .

Таким образом, введя в текстовые поля значения х и у и выбрав мыш-

кой в списке необходимую арифметическую операцию, в нижнем окне

получим необходимый результат.

2.6. Пользовательские классы

В некоторых случаях пользователю удобно создать свой объект со специфическими свойствами и методами, не имеющий аналогов среди готовых образцов. Все объекты, удовлетворяющие необходи-мым требованиям, объединяются в так называемый пользовательский класс. Этот класс может быть введен с помощью меню “Insert” (“Вставка”), пункт “Новый класс”. В редакторе VBA в меню “Свойс-тва” можно указать имя нового класса, которое будет определять объекты нового типа. Свойства объектов класса вводятся в области кода как переменные общего доступа (“Public”) в разделе “Option Explicit”. Методы объектов класса суть процедуры или функции, обра-батывающие некоторые свойства. В отличие от стандартных объектов новый конкретный объект класса должен быть создан с использовани-ем функции NEW и присвоен конкретному идентификатору операто-ром SET. “Обнуляется” объект присваиванием специфической уни-версальной константы Nothing.

В VBA имеется возможность создавать коллекции новых объ-ектов с помощью стандартного класса COLLECTION, имеющего одно свойство Count (количество элементов в коллекции) и три метода: Add (добавляет объект в коллекцию), Remove (удаляет объект из кол-

лекции), Item (возвращает объект коллекции с указанным номером).

Пример 1. Пусть нужно создать небольшой занумерованный список фамилий с телефонами.

Создадим класс с именем Tlist:

Option Explicit

Public Num As Integer ' порядковый номер в списке

Public Name As string ' имя представителя

Public Tel As long ' номер телефона

Public Sub Clr() ' метод очищает содержимое объекта

Num = 0 : Name = ”” : Tel = 0

End Sub

Public Function Inf() as string

Inf = Str(Num) + “:” + Name + “, Telef:” + Str(Tel)

End Function ' метод возвращает строку информации об объекте.

Определим переменные типа

Dim i As Integer ' счетчик в коллекции

Dim DataList As Tlist ' объект созданного класса

Dim Check As New Collection ' коллекция объектов класса.

На листе Excel поместим две кнопки: Cb1 (Caption “Добавить”) и Cb2 (Caption “Показать”), с кодами

Private Sub Cb1_Click() ' вводятся элементы коллекции

Set DataList = New Tlist ' создается объект

i = i+1

With DataList ' ввод данных

.Num = i : Name = InputBox(“Введите имя”)

.Tel = Val(InputBox(“Введите номер телефона”))

End With

Check.Add DataList ' добавление элемента коллекции

End Sub

Private Sub Cb2_Click() ' “показываетобъект

i = Val(InputBox(“Введите номер элемента в списке”))

Set DataList = Check.Item(i) ' выбор элемента коллекции

MsgBox DataList.Inf ' метод Inf выдает содержимое объекта

End Sub

Теперь при нажатии кнопки “Добавить” появляются окна ввода фамилии и телефона и автоматически присваивается номер в коллек-ции. При нажатии кнопки “Показать” и вводе номера в коллекции на экране появится информация об указанном объекте.

Пользовательские классы позволяют организовать динамическое распределение памяти явно, т. е. строить объекты, которые занимают память в зависимости от поступающей информации. Речь идет о конс-трукции, аналогичной указателям в языке Pascal, но более гибкой. Со-здаваемый объект формируется как пользовательский тип данных, имеющий информационное поле и одно или несколько полей ссылок. Таким образом, при определении класса позволено указывать неявную ссылку на создаваемый объект (т. е. делается ссылка не на сам объект, которого еще нет, а на место в памяти, где этот объект будет находить-ся). При поступлении информации неявная ссылка делается явной и динамическая память для этого объекта изменяется.

Пример 2. Пусть некоторое число человек, пересчитавшись по порядку, встали в круг (за последним идет снова первый) и, как в дет-ской “считалке”, требуется удалить из круга каждого k-го по счету.

Создадим пользовательский класс Circ со свойствами:

Option Explicit

Public Num As Long 'номер по порядку

Public Pre As Circ ' ссылка на предыдущего в круге

Public Nxt As Circ ' ссылка на следующего в круге

На листе Excel поместим текстовое окно Text1 для вывода содер-жимого круга, текстовое окно Text2 для ввода числа k (модуль пе-ресчета) и три кнопки: Cb1(“Initia”) – инициализация класса пере-менных, Cb2(“Add”) – добавление в круг нового человека, Cb3(“De-

lete”) – удаление из круга очередного k-го по счету, с кодами

Option Explicit

Dim first As New Circ ' первый в круге

Dim last As New Circ ' последний в круге

Dim cur As Circ ' текущий объект “считалки”

Dim count As Long ' счетчик

Private Sub Cb1_Click() ' инициализация

Set first.Nxt = last : first.Num = 1

Set first.Pre = last ; count = 2 ' формированиекруга

Set last.Pre = first : last.Num = 2 ' из двух человек

Set last.Nxt = first : Text1.Text = “”

Set cur = Nothing ' пустой объект

End Sub

Private Sub Cb2_Click() ' добавление в круг

Dim ncell As New Circ

count = count + 1

ncell.Num = last.Num : last.Num = count

Set last.pre.Nxt = ncell : Set last.Pre = ncell

Display ' вывод информации в текстовое окно Text1

End Sub

Private Sub Cb3_Click() ' удаление из круга k-го по счету

Dim m As Long, k As Long

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]