Въведение.
Миналата седмица създадохме обект на извлечен клас ClsVolume, използвайки клас ClsArea като основен клас. Създадохме процедури за свойства в извлечения клас, за да изложим свойствата и функцията на основния клас на потребителските програми на обекта. Този метод изисква повторение на всички процедури за свойства на основния клас и в производния клас. Тук изследваме как да създадем същия клас Derived ClsVolume, без да повтаряме процедурите за свойства на основния клас ClsArea.
Научихме как се използва Get и Нека Процедури за собственост в класове. Има още една процедура за свойства, използвана в класовете:Set Процедура за собственост. Процедурата за свойство Set директно присвоява обект на обект от клас от същия тип.
Преди да продължите по-нататък, можете да посетите предишните страници по тази тема, ако още не сте го направили, връзките са дадени по-долу:
- Модул за MS-Access Class и VBA
- Обектни масиви от клас VBA на MS-Access
- Основен клас на MS-Access и производни обекти
Клас ClsVolume, преобразяването.
Ще създадем различен вариант на същия ClsVolume Class Module, който създадохме миналата седмица, използвайки ClsArea като основен клас, с различен подход и с по-малко код.
Създайте нов модул за клас и променете неговата стойност на свойството на име на ClsVolume2 .
Копирайте и поставете следния код в модула Class ClsVolume2 и запазете модула:
Option Compare Database Option Explicit 'Method two-1 Private p_Height As Double Private p_Area As ClsArea Public Property Get dblHeight() As Double dblHeight = p_Height End Property Public Property Let dblHeight(ByVal dblNewValue As Double) p_Height = dblNewValue End Property Public Function Volume() As Double Volume = p_Area.dblLength * p_Area.dblWidth * p_Height End Function
„Ново Вземете и Задаване Процедура за свойства за ClsArea ObjectsPublic Property Вземете CArea() Като ClsArea Задайте CArea =p_AreaEnd PropertyPublic Property Set CArea(ByRef AreaValue като ClsArea) Задайте p_Area =AreaValue
Изберете Компилиране Име на проекта от Отстраняване на грешки Меню за компилиране на VBA кода в базата данни, за да се гарантира, че целият код на VBA проект е без грешки. Ако сте срещнали грешка в другите си VBA програми, моля, проследете грешката, коригирайте я и прекомпилирайте своя проект. В противен случай VBA IntelliSense, който показва списък със свойства и функции на обекти, няма да работи. Това няма да ни попречи да присвояваме/извличаме стойности към/от свойствата на обекта. Но докато учите, е важно да видите как изскачат свойствата на обекта и показва списъка, като помощник в кодирането.
Вземете/Задайте вместо процедурата Get/Let Property.
Пропуснахме всички процедури за свойства на ClsArea, създадени в последната версия на ClsVolume Class, и ги заменихме с Get/Set Процедури за собственост, вместо Get/Let . Проверете областта на декларацията, където сме декларирали p_Area е деклариран като обект на клас ClsArea.
Когато обектът е деклариран по този начин, обикновено трябва да създадем екземпляр на този обект в процедурата Class_Initialize() в горния код. Не го направихме тук, защото планираме да го направим в потребителската програма и да попълним нейните свойства с подходящи стойности и след това да го предадем на класа ClsVolume2, преди последната фаза на изчисление, за да използваме техните стойности.
Обърнете внимание на Задаване на CArea() процедура. Това е ByRef параметър AreaValue е деклариран като ClsArea Object. Той ще приеме обекта на класа ClsArea, когато се предаде на Набор на свойства CArea(ByRef AreaValue като ClsArea) , в обектна променлива AreaValue, и присвоява на p_Area Свойство на ClsVolume2 Обект.
Вземете CArea() Процедурата Property връща обекта към извикващата програма.
В предишните ни програми сме написали процедури за свойства за отделни елементи (дължина, ширина, височина) на обект за присвояване/връщане стойности До/От тях. Тук разликата е, че предаваме цял обект като параметър на процедурата Set. За да извлечем стойността на свойството на този обект (да речем lblHeight), трябва да го адресираме като CArea.dblLength . Get/Set Име на процедурата CArea става дъщерен обект на главния обект, когато е деклариран в основната програма и техните процедури за свойства могат да бъдат достъпни директно чрез адреса на обекта Vol.CArea.dblLength.
Тестова програма в стандартния модул.
Ще напишем малка програма в стандартния модул, за да тестваме нашия нов извлечен обект на клас ClsVolume2.
Поставете нов стандартен модул във вашия проект. Копирайте и поставете следния код в модула и запазете кода:
Public Sub SetNewVol2_1() 'Method 1/2 Dim Vol As New ClsVolume2 'ClsArea Object instantiated and passed to the 'Property Procedure Set CArea in ClsVolume2. Set Vol.CArea = New ClsArea 'declare and instantiate the object in one statement Stop Vol.CArea.strDesc = "Bed Room" Vol.CArea.dblLength = 90 Vol.CArea.dblWidth = 10 Vol.dblHeight = 10 'assign height to ClsVolume2 Stop Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume" Debug.Print Vol.CArea.strDesc, Vol.CArea.dblLength, Vol.CArea.dblWidth, Vol.CArea.Area, Vol.dblHeight, Vol.Volume Set Vol.CArea = Nothing Set Vol = Nothing End Sub
Преглед на код Ред по ред.
.Нека да разгледаме набързо VBA кода по-горе. Първият ред инстанцира класа ClsVolume2 с името Vol. След следващите два реда за коментари Set изявление с Vol.CArea Процедура за собственост се извиква и преминава Нова инстанциран ClsArea Обект като параметър.
Сложих Стоп изявление в следващия ред, за да направите пауза в програмата, за да видите как обектът се присвоява на Набор CAREa Обект. Как? ще проучим това след минута?
Следващите четири реда присвояват стойности на обекта ClsArea и на свойството Height на обекта ClsVolume2.
Следващата спирка създава пауза в програмата, за да можем да проверим паметта как стойностите се съхраняват в паметта.
Следващият ред отпечатва заглавията в прозореца за отстраняване на грешки за стойностите, отпечатани на следващия ред.
Следващият ред отпечатва стойностите на свойствата на обекта от паметта в прозореца за отстраняване на грешки.
Изпълнете кода към следващия оператор за спиране
Нека стартираме кода и да проверим паметта, за да видим какво се случва там на всеки етап, където поставям оператора Stop.
- Щракнете някъде в средата на кода и натиснете F5 за да стартирате кода и да поставите програмата на пауза при първото изявление за спиране
- Изберете Прозорец Locals от Преглед Меню, за да отворите нов прозорец под прозореца на кода, за да покажете как обектите ClsArea и ClsVolume2, техните свойства и процедурите им за свойства на членове се съхраняват в паметта. Примерно изображение на Прозорец Locals е даден по-долу.
Прозорецът Locals Преглед.
Плъзнете други манипулатори за оразмеряване на Windows нагоре, за да намалите височината им, за да дадете повече място за показване на Местни прозорец. По-добре, затворете прозореца за отстраняване на грешки, за момента използвайте Ctrl+G, за да го върнете, когато е необходимо по-късно.
Можем да имаме графичен изглед на всички обекти и техните свойства в Locals прозорец. Първото име със символа плюс [+] показва името на стандартния модул, откъдето се изпълнява нашата програма.
Следващият символ плюс [+] с името Vol е ClsVolume2 инстанциран обект в паметта.
- Щракнете върху символите [+], за да разгънете и покажете подробностите.
Ще намерите следващото ниво на обекти и свойства.
Зо [+]CAREA показва, че този обект има следващото ниво на свойства и техните стойности.
dblHeight Процедурата за получаване на свойство идва директно под обекта Vol.
[+]p_Area е частната собственост, декларирана като ClsArea Клас в класа ClsVolume2.
p_Height също е частна собственост, декларирана в ClsVolume2.
- Кликнете върху плюса [+] символи за разширяване на обектите, за да покажат техните свойства и стойности.
Разширяването на [+]CArea ни дава изгледа на обекта ClsArea, който сме предали на процедурата за свойство Set CArea().
Разширяването на [+]p_Area дава изглед на собствеността ClsArea, обявена за частна.
Обърнете внимание на p_Area Частна собственост на ClsVolume2 Class Object и всички негови елементи са достъпни само чрез CArea Свойство на обект Вземете/задайте Процедури към външния свят.
Втората колона на прозореца Locals ще покаже стойностите, присвоени на свойствата на обекта и в момента няма стойности в тях.
Третата колона показва имената на модула на типа данни или класа на обекта.
- Натиснете F5, за да стартирате програмата по-нататък, докато не бъде поставена на пауза при следващия оператор Stop, за да присвоите някои стойности в свойствата на обекта. Програмата ще спре при следващото спиране изявление. Проверете прозореца Locals за промяна на стойностите.
Вътре в CAREa Обект на първите два реда със стойности 90, 10 и последния strDesc със стойност "Bed Room" са Get Процедури за собственост. p_Desc, p_Length и p_width са стойности, присвоени чрез Set Процедури за свойства на p_Area Свойство на обект на клас ClsVolume2.
p_Area Обект на клас ClsArea, деклариран като частна собственост на ClsVolume2, се вижда с неговия Get/Set Процедури за свойства и присвоени стойности.
Проверете Тип Колона на [-]CArea и [-]p_Area и двата обекта са получени от ClsArea Base Class.
Използване на ClsArea и ClsVolume2 клас обекти по различен начин.
Следващата седмица ще опитаме друг подход със същите два обекта. Ако искате да го опитате сами, ето уликата как да го изпробвате сами.
- Създайте ClsVolume2 и ClsArea клас като два различни обекта в стандартната модулна програма.
- Задайте стойности и на двете свойства на обекта.
- Присвоете инстанциирания обект ClsArea към CArea Обект в ClsVolume2 Class Object, преди да отпечатате стойностите в прозореца за отстраняване на грешки.
В този пример можем да постигнем същия резултат, както направихме в горния пример, без да повтаряме процедурите за свойства Get/Let, както направихме в модула за клас ClsVolume.
Връзките на всички страници по тази тема.
- Модул за MS-Access Class и VBA
- Обектни масиви от клас VBA на MS-Access
- Основен клас на MS-Access и производни обекти
- Базов клас на VBA и производни обекти-2
- Варианти на основен клас и производен обект
- Ms-Access Recordset and Class Module
- Достъп до модул за класове и класове за обвивка
- Преобразуване на функционалност на класа на обвивката
- Основи на Ms-Access и колекция обекти
- Модул за клас Ms-Access и обект на колекция
- Записи в таблицата в обект и форма на колекция
- Основи на обекта на речника
- Основи на обекта на речника-2
- Сортиране на ключове и елементи в речника
- Показване на записи от речник към формуляр
- Добавяне на обекти на клас като елементи от речника
- Добавяне на обекти на клас като елементи от речника
- Актуализиране на елемент от речника за обект на клас във формуляра