КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Интерфейсы
Уничтожение экземпляра класса Достаточно редко предлагает класс среди своих методов метод удаления экземпляра класса. Это понятно, ведь получается, что должен работать метод уже уничтоженного (уже не существующего вместе со всеми своими свойствами и методами!) объекта. Чаще удалять экземпляры класса (и добавлять) должна некоторая внешняя по отношению к классу программа. В нашем случае можно воспользоваться коллекцией Controls. Метод Add – добавление элементов, а метод Remove – удаление. Параметр метода Remove – номер элемента коллекции. А как его определить? Рассмотрим способ запоминания в самом объекте, номера, с которым он входит в коллекцию. Для этого можно воспользоваться либо свойством tag, которое есть у всех элементов управления, либо завести соответствующее свойство в нашем классе. Заметим, что с номерами работать невозможно в случае, если изменяется количество элементов коллекции в результате удаления произвольного элемента или добавления в произвольное мемто. Может лучше работать с именем? Имя – свойство объекта, поэтому его не надо нигде повторно запоминать! Имя вы можете даже сами генерировать, если Вас не устраивает имя по умолчанию. Остановимся на имени, причем будем брать умалчиваемое имя. Ниже описан пример. Итак, в классе с именем Class1: Public WithEvents im As Image Private Sub Class_Initialize() Set Me.im = UserForm1.Controls.Add("Forms.Image.1") End Sub В обычном модуле с именем Module1: Public ob As Class1 Sub игра() UserForm1.CommandButton1.Caption = "начать" UserForm1.Show End Sub В форме с именем UserForm1: Private Sub CommandButton1_Click() If Me.CommandButton1.Caption = " начать" Then Me.CommandButton1.Caption = "остановить" Set Module1.ob = New Class1 Else Me.CommandButton1.Caption = " начать" Module1.ob.im.Parent.Controls.Remove Module1.ob.im.Name Set Module1.ob = Nothing End If End Sub В приведенном примере обратите внимание на строчку в инициализации класса, в которой создается элемент на форме и одновременно устанавливается на него ссылка из экземпляра класса. В строчках модуля – вызов формы. В программном коде формы: при щелчке по кнопке «начать» – создается экземпляр нашего класса, а при щелчке по кнопке «остановить» – удаляется элемент управления на форме и экземпляр нашего класса. Здесь важно понять, что от элемента управления можно перейти к форме, воспользовавшись методом Parent (объект – родитель), а затем снова вернуться к нему, но по другой ветке объектного дерева (Controls). В приведенном примере всюду указан модуль как надобъект над объектной переменной ob. Это не случайно, хотя и не обязательно: по умолчанию свойство ob доступно во всем проекте. Здесь просто подчеркнут факт, что ob является свойством объекта Module1. Интересное явление – обеспечение интерфейсов классов. Интерфейс – это список прототипов, каждый из которых содержит только описание свойств и методов. В теории класс может наследовать один или несколько интерфейсов. В конечном классе должен быть указан код для всех наследуемых Public методов. В VBA для того чтобы указать, что данный класс обеспечивает интерфейс другого класса, надо в общей области написать оператор IMPLEMENTS имя класса. В стандартных модулях не допускается обеспечение интерфейсов. Важно: VB не поддерживает наследование классов, а только интерфейсов.
Дата добавления: 2013-12-12; Просмотров: 330; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |