Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структурные особенности Visual Basic.docx
Скачиваний:
44
Добавлен:
17.11.2019
Размер:
2.86 Mб
Скачать

6. Раннее и позднее связывание с объектом. Примеры.

Скорость выполнения приложения во многом зависит от того, каким образом VB осуществляет связывание объектной переменной с объектом. Существует раннее и позднее связывание .

Раннее связывание осуществляется при объявлении объектной переменной с явным указыванием имени класса. Например,

 

Dim Obj1 As New Form1

Dim Obj2 As New Class1

Dim ObjWord As New Word.Application

Dim ObjExcel As New Excel.Application

Dim ObjAccess As New Access.Application

 

Раннее связывание происходит на этапе компиляции и выполня­ется быстрее. При раннем связывании перед написанием кода необхо­димо загрузить в память библиотеку с классом, используя команду Project\References, окно References и список Available References. После чего следует приступать к созданию объектной переменной (уже определенного класса) с ключевым словом New.

Если же при объявлении объектной переменной используется универсальный тип Object, Variant, Control, то VB осуществляет позднее связывание переменной с объектом. Например,

 Dim mObject As Object, Obj As Control

For Each Obj In Me.Controls

If TypeName(Obj) = "TextBox" Then Obj.BackColor = 0

Next

Set mObject=CreateObject(“Word.Application”) 'Установить связь

………………………………………………………

Set mObject=Nothing 'Разорвать связь объекта с приложением Word

Set mObject=CreateObject(“Excel.Application”) 'Установить связь

………………………………………………………

Set mObject=Nothing 'Разорвать связь объекта с приложением Excel

 

Позднее связывание оправдано тогда, когда невозможно заранее определить, какие типы объектов будут использоваться при выпол­нении программы, что требует дополнительных затрат времени на анализ допустимых объектов. При первом обращении к свойствам и методам объекта происходит событие Initialize – создание объекта, а в строке Set mObject=Nothing наступает событие Terminate – уничто­жение объекта и освобождение памяти.

К недостаткам раннего связывания можно отнести привязан­ность создаваемого Вами приложения к конкретной версии библио­теки объектов. Выход в свет новой версии продукта, объектную модель которого Вы используете посредством раннего связывания, приведет к необходимости обновления Вашего приложения. К досто­инству раннего связывания можно отнести способность отображать список свойств и методов объекта после ввода точки при написании кода. Обычно раннее связывание используется на стадии отладки приложения. Завершающая стадия разработки приложения осуществ­ляется обычно на основе позднего связывания, не зависящего от новых версий используемых в проекте объектных моделей.

7. Способы объявления событий классов. Примеры.

Каждый класс кроме свойств и методов имеет набор собственных событий. События – это реакция объекта на действие системы, поль­зователя и других приложений. События, определяемые пользовате­лем, могут объявляться как внутри модуля класса (в области GD окна Code класса) с помощью команды File\New\Event или кнопки  окна Class Builder, так и внутри модуля формы одним и тем же оператором Event. Параметры, передаваемые процедуре события, должны быть указаны в той же строке объявления события. Например,

 Public Event WWW()

Public Event XXX(ByVal A As Long, ByVal B As Long)

 Для генерации (выполнения) события предназначен оператор RaiseEvent, которому в качестве параметра передается имя события. Например,

 Public Sub Text1_Change()

RaiseEvent WWW 'Реализация события WWW

End Sub

Public Sub Command1_Click()

RaiseEvent XXX(500,300) 'Реализация события XXX

End Sub

 Контейнер (модуль класса или формы), в котором используется объект, должен содержать процедуры-события.

Пример 59. Объявить событие в модуле класса, а запрограммировать его в модуле формы.

  Пусть событие (назовем его MTS) имеет два параметра. Первый – числовой, второй – логический. Событие будет реализовываться в методе Long1. Выполните следующие действия.

· Создайте новый проект с шаблоном Standard EXE.

· С помощью команды Project\Add Class Module добавьте модуль класса с именем Class1 в проект, используя шаблон Class Module на закладке New.

· Поместите в него следующий код.

Public Event MTS(ByVal Percent As Single, ByRef Cancel As Boolean)

Public Sub Long1(ByVal f As Single, c As Boolean)

RaiseEvent MTS(f, c) 'Вызов события MTS с двумя параметрами

End Sub 

· Теперь добавьте в область GD окна Code модуля формы следующий код: 

Private WithEvents mW As Class1, nCancel As Boolean, r As Single

'Ключевое слово WithEvents означает, что объект mW содержит события

Private Sub Command1_Click()

nCancel = False

r = Rnd

Set mW = New Class1 'Создание нового объекта на основе класса

Call mW.Long1(r, nCancel) 'Обращение к методу Long1

Text2 = nCancel 'Выводим значение, возвращаемое из события

Set mW = Nothing

End Sub

Private Sub Form_Load()

Text1 = Format(r, "0 %")

Text2 = ""

End Sub

Private Sub mW_MTS(ByVal Percent As Single, _

Cancel As Boolean)

m% = CInt(100 * Percent)

Text1 = m & "%"

If m >= 50 Then Cancel = True

End Sub