A. Въведение .
Microsoft Tree View Control е част от общите контроли на Microsoft Windows. Това е интересна част от обект, която показва свързани данни в йерархия от възли. Може да показва свързани данни, като записи и подзаписи в индексен списък или списък с папки като левия панел на Windows Explorer или списък на свързани елементи в йерархична структура с дървета, квадратчета за отметка и графики на растерни изображения .
Изглед на списък и ImageList Контролите са част от общите контроли на Windows и ние ще ги използваме заедно с TreeView Control в Microsoft Access.
Мисля, че бихте искали да разгледате някои примерни демонстрационни изображения на TreeView Control, върху които ще работим през следващите няколко седмици.
B. Примерни демонстрационни изображения .
Възли в свито състояние.
- Примерното демонстрационно изображение TreeView с всички възли в свита форма.
Възли в разширения изглед.
- Горещите контролни възли на TreeView в разширения изглед.
С икони на изображение със стрелка.
- Примерен дисплей на TreeView, с икони на изображения със стрелка, показани вляво от всеки текст на възел.
Възлите на коренно ниво имат изображения на папка, други със стрелка.
- След това показва TreeView със свързани данни в подформуляр. Възлите на коренно ниво имат две изображения. Затвореното в папка изображение се показва в нормален режим. Когато възелът на коренно ниво получи щракване с мишката, той показва изображението с отворена папка и показва дъщерните възли в разширена форма.
Свързаната информация се показва във подформуляра въз основа на избора на възел на коренно ниво.
Един от избраните елементи на дъщерния възел показва друг формуляр (обикновено остава скрит) със свързана информация.
Контроли TreeView и ListView
- На следващото изображение на формуляр има два панела. Възлите, свързани с артикули за категорията на продукта, са в TreeView Control, в левия панел. Когато един от артикулите в категорията получи щракване върху контролата TreeView, свързани продукти с количество и каталожна цена в отделни колони ще се покажат в ListView Контрол, в десния панел.
В. Създаване на примерни данни за пробно изпълнение.
Нека изпробваме TreeView Control с някои примерни данни, показани по-долу, въз основа на първите две изображения, показани в началото на тази страница.
Горната примерна таблица с данни има три полета.
-
Идентификационният номер полето е поле AutoNumber с уникални идентификационни номера. Типът AutoNumber е избран за наше удобство. И в двата случая всички записи в таблицата трябва да имат уникална стойност на идентификатора. Ако е числово, тогава трябва да се преобразува в низов тип, преди да се добави към контролата TreeView.
-
Второто поле е Описание на възел (Desc ). Редовете с информация в тази колона са логически свързани.
-
Третият ParentID полето е числов тип. Но те трябва да бъдат преобразувани в String Type, преди да го използвате в TreeView Control.
Трябва да знаем как стойностите на колоната за описание са свързани една с друга, въз основа на това можем да установим връзката, като въведем свързани стойности в ParentID поле.
Например логическото подреждане на връзката между автор на книги, издатели на книги, книжарници, където книгите се продават, или като връзка между членове на родословно дърво.
Връзка между продуктова категория, продукти, наличност, цена и т.н. Цялата тази информация може да не се показва под една колона в една таблица. Те могат да се показват и в различни колони или в различни таблици.
ParentID полето е много важно, тъй като определя йерархичното подреждане на възлите. Ако полето ParentID е празно, тогава този запис трябва да отиде като възел на коренно ниво. Child-Node винаги трябва да има своя ParentID, попълнен със стойността на ID на родителските записи.
Възелът на коренно ниво може да има един или повече дъщерни възли, дъщерният възел може да има свой собствен дъщерен възел(и).
Ще заредим горните данни в TreeView Control и ще видим как изглежда. След това ще попълним ParentId поле със свързанID s, за да промените изгледа, начина, по който искаме да го видим в логически ред.
D. Файл с библиотека с общи контроли на Windows .
-
Но първо отворете една от вашите бази данни или създайте нова.
-
Отворете прозореца на VBA (ALT+F11 ) и изберете Референции... от Инструменти Меню.
-
Потърсете файла:Общи контроли на Microsoft Windows в показания списък с файлове и поставете отметка, за да го изберете.
Ако не можете да намерите файла в списъка, щракнете върху Преглед... Бутон и намерете файла:MSCOMLIB.OCX в системната директория на Windows, за версия на Windows 7 потърсете файла в SysWOW64 папка. Щракнете върху OK за да затворите контрола на списъка с библиотечни файлове.
-
Създайте таблица със следната структура:
-
Запазете таблицата с името Проба .
-
Попълнете таблицата с примерни данни от 12 записа, както е показано на изображението по-горе.
Е. Създаване на контрола TreeView във формуляр
-
Създайте нов празен формуляр.
-
Кликнете върху Activex Controls бутон от Контроли Група, намерете Microsoft TreeView Control след това го изберете.
-
Щракнете върху OK за да вмъкнете контрола TreeView във формуляра.
-
Плъзнете контролата надолу и надясно, за да оставите малко място в горната и лявата част на TreeView Control. Плъзнете дръжката за оразмеряване в долния десен ъгъл към десния и долния ъгъл, за да направите контролата по-голяма, като примерното изображение, дадено по-долу.
-
Покажете листа със свойства на контролата и променете нейното име Стойност на свойството до TreeView0, ако там е различно.
-
Показване на прозореца за редактиране на VBA на формуляра.
- Копирайте и поставете следния VBA код в модула, като презапишете съществуващите редове код там:
Option Compare Database Option Explicit Dim tv As MSComctlLib.TreeView Const KeyPrfx As String = "X" Private Sub Form_Load() Dim db As Database Dim rst As Recordset Dim strSQL As String Dim nodKey As String Dim ParentKey As String Dim strText As String Set tv = Me.TreeView0.Object strSQL = "SELECT ID, Desc, ParentID FROM Sample;" Set db = CurrentDb Set rst = db.OpenRecordset(strSQL, dbOpenDynaset) Do While Not rst.EOF And Not rst.BOF If Nz(rst!ParentID, "") = "" Then nodKey = KeyPrfx & CStr(rst!ID) strText = rst!Desc ‘Add the TreeView Root Level Nodes tv.Nodes.Add , , nodKey, strText Else ParentKey = KeyPrfx & CStr(rst!ParentID) nodKey = KeyPrfx & CStr(rst!ID) strText = rst!Desc ‘Add the Record as Child Node tv.Nodes.Add ParentKey, tvwChild, nodKey, strText End If rst.MoveNext Loop rst.Close Set rst = Nothing Set db = Nothing End Sub
-
Запазете формуляра с името frmSample, но не затваряйте прозореца на VBA.
Г. VBA код ред по ред.
Ф. Достъп до VBA код.
Нека да разгледаме набързо VBA кода и да разберем какво прави.
В областта на глобалната декларация, на модула за формуляри, променливата tv деклариран като TreeView Обект. KeyPrfx деклариран като Constant , със стойност на низовия тип „X“.
Възелът на TreeView Ключ-стойност на ' трябва винаги да е от тип низ и се нуждае от поне един нецифров знак, присъстващ в ключа на възела. Нашите примерни ключови стойности на таблицата са в числова форма, можем да ги преобразуваме и добавяме към стойността на константата „X “. Числовата стойност, преобразувана само в низов тип, няма да се приеме като възел-ключ.
Забележка: Ако Ключ на възел и Родителски ключ стойностите вече са в алфа или алфа-цифрова форма, тогава въпросът за преобразуването не възниква. Всички стойности на Node-Key трябва да са уникални.
В Form_Load() Процедура за събитие, обектите Database и Recordset са декларирани. Четири низови променливи също са декларирани.
Изявлението Set tv =Me.TreeView0.Object оператор присвоява, TreeView0 Обект във формуляра, към обектната променлива tv.
Операторът OpenRecordset() отваря Проба Таблица Записи с помощта на SQL strSQL.
Прави, докато... оператор гарантира, че наборът от записи не е празен, ако е празен, излезте от Loop и прекратете програмата.
Ако има записи, тогава ParentId на първия запис полето се проверява за наличието на някаква стойност там или не.
Ако е празен, този запис е за Възела на коренно ниво на контролата TreeView вещ. Възелът на коренно ниво се нуждае само от уникалния Ключ на възел Стойност, която вече имаме в ID Поле и артикул Описание Стойност на полето за Текст Аргумент.
Ако ParentID поле има някаква стойност, тогава записът е Дъщерски възел (Дъще на възел от коренно ниво или дъщер на някакъв дъщерен възел от по-горно ниво) на обекта TreeView.
Следващият ред създава Ключ Стойност на аргумента в nodKey Низова променлива с ID поле Стойност, преобразувано в низ и добавено към константния префикс X, възел-ключ става X1 .
Първото!описе стойност на полето, добавена към низовата променлива strText, просто за яснота и за краткост в Nodes.Add() Списък с параметри на метода, ако препратката към полето е много дълга, това ще поддържа метода Add() чист и подреден.
Следващият изпълним ред:tv.Node.Add() извиква метода Add() на TreeView.Nodes Обект за добавяне на възела към TreeView0 контрол във формуляра frmSample .
Синтаксис на метода Add() е даден по-долу за справка:
tv.Nodes.Add([Relative],[Relationship],[Key],[Text],[Image],[SelectedImage]) As Node
Всичките шест параметъра на Add() метод са по избор. Ако извикате този метод без никакви параметри, тогава празен възел на коренно ниво ще бъде добавен и празен дървовиден ред ще се появи като индикатор в контролата TreeView.
За TreeView Root НивоВъзел изисква Ключ и Текст Стойности на аргумента.
За дъщерните възли и двете [относителни] и [Връзка] Необходими са аргументи. Пропускането на някой от тях ще вмъкне възела като основен възел, но няма да генерира грешка.
[Относителна] е NodKey на съществуващ възел, въведен в ParentID на свързания запис поле. [Връзка] е Constant tvwChild с числова стойност 4, идентифицирайки го като дъщерен възел на Ключ- Стойност в ParentID Поле.
Другата Константа Стойностите за аргумента на връзката се използват за позициониране на дъщерни възли в определено място. Постоянните стойности са както следва:
tvwFirst =0, го поставя като първи възел, на нивото на относителния възел.
tvwLast =1, места като последен възел, на нивото на относителния възел.
tvwNext =2, поставя възела след определен възел.
tvwPrevious =3, поставя възела непосредствено пред посочения възел.
Забележка: Можете да експериментирате, като зададете всяка стойност във връзката Аргументирайте и стартирайте кода в режим на отстраняване на грешки, след като запазите прозореца и формуляра на VBA в нормален изглед един до друг. Гледайте как възлите се подреждат във всеки цикъл на изпълнение на кода, за да разберете.
Те ще бъдат полезни при редактиране на TreeView Control чрез изтриване на елемент и вмъкване на друг елемент на негово място или добавяне на нов възел на определено място.
Възел с [относителен] ключ трябва да съществува в колекцията възли, преди да се опитате да добавите дъщерен възел към този възел, в противен случай методът Add() генерира грешка.
Този процес се повтаря, докато всички записи се обработят в набора от записи.
Забележка: Можете да прегледате VBA кода отново след стартирането на демонстрацията.
H. Първият пробен пуск.
Отворете формуляра в нормален изглед. Резултатът от пробното изпълнение ще изглежда като изображението, дадено по-долу.
Не изглежда повече от нормално Listbox. Не забравяйте, че не сме попълнили стойност в ParentID поле в нашата Проба Таблица. Трябва да установим някаква връзка между елементите в редовете на Record, за да ги преместим и позиционираме в йерархичен ред в контролата TreeView.
I. Разбиране на връзката между записите.
- Отворете Таблица с примери и нека разгледаме записите и как са свързани.
- Нека напуснем базата данни елемент самостоятелно като основен елемент.
Обектът на базата данни също има някои обекти от най-високо ниво:Application, DBEngine, Workspaces Collection и Databases Collection , което сме пропуснали тук.
- След това имаме Таблиците групов артикул сID стойност 2.
- Следващата таблица , Полета, Поле елементите са свързани с Таблиците група. Искаме Масата Полета, и Поле елементи, които да се подредят под родителския елемент Таблици Групов запис със стойност на ID 2.
- Нека наречем записа Таблици като Родителски възел , таблица, полета и записи на полета като Дъщерни възли .
Дж. Актуализиране на полето ParentID.
- Така че трябва да актуализираме стойността 2 (Ключ за възел на Таблици ) в parentIDа поле на Таблица , Полета, и Поле записи.
- Моля, актуализирайте само тези записи и затворете таблицата. Когато бъде направено, записите ще изглеждат като изображението, дадено по-долу:
-
Сега отворете своя frmSample във Form View и проверете TreeView Control. Резултатът ще изглежда като предишния без промяна. Промените вече са извършени, но не се виждат за вас.
К. Листът със свойства на TreeView Control.
- Завъртете frmSample в Design View.
- Щракнете с десния бутон върху контролата TreeView и маркирайте TreeCtrl_Object от контекстното меню и изберете Свойства .
Листът със свойства ще изглежда като изображението, дадено по-долу:
- Променете LineStyle Имоти Стой=1 (tvwRootLines) и щракнете върху Прилагане и след това щракнете върху OK за да затворите листа със свойства.
Л. Изпълнете след LineStyle Промяна на стойността на свойството
- Запазете формуляра и го отворете в нормален изглед. Сега дървесните линии се появяват правилно. Таблиците Възелът има плюс (+ ) знак от лявата страна, което показва, че този възел има един или повече дъщерни възли в следващото ниво и те не са в разгъната форма.
- Щракнете върху символа плюс, за да разширите възела и да покажете дъщерните възли със същия ParentID. Когато щракнете върху символа минус, дъщерните възли се свиват и скриват, променяйки символа отново на знак плюс.
- Екранът ще изглежда като следното изображение, когато е разгънат:
М. ParentID Актуализиране на други записи.
Ще актуализираме Формулярите запис ID Стойност (стойност на възел-ключ) в Формуляр, Контроли, и Контрол ParentID на записи полета, така че тези записи да се показват под Формулярите Възел като негов Дъщерски възли .
По същия начин актуализирайте полето ParentID на Отчет и Контроли записи с Отчети ИД (Стойност на възел-ключ) Стойност, така че Отчет и Контроли елементите ще се позиционират под Отчети на родителския възел , тъй като това е Дъщерни възли .
-
Направете промени в записите си в Примерна таблица със стойностите на ParentID, както е показано по-долу:
След горните промени, TreeView дисплеят ще изглежда като следното изображение, когато всички възли са в разгъната форма.
Всички дъщерни възли, свързани с възлите на коренно ниво:таблиците, формулярите и отчетите са групирани като списък под техните родителски възли. Но дъщерният възел може да има родителски възел, възел на дядо-родител или възел на голям родител.
Н. Подреждане на всички обекти в логически йерархичен ред.
Например, нека вземем първите Таблици на възел на коренно ниво . Логично Поле (с идентификатор на запис 5) е пряко свързан с Полета колекция (идентификатор на запис 4), Полета колекция, свързана с Таблица и Таблица е част от Таблици колекция. Всеки елемент в групата (номер на запис от 5 до 2) е свързан с една стъпка към следващото ниво.
Така че нека позиционираме тези дъщерни възли правилно под техния родителски възел и да видим как изглежда.
-
Отворете своята примерна таблица и променете стойностите на ParentID на Таблиците свързани с Child Records, както е показано по-долу:
- Полето с Родител на ID-5 запис е Полета, запис с ID-4, следователно актуализирахме полето ParentID на 5-ия запис с идентификационен номер 4.
- По същия начин полето ParentID на 4-ти запис се актуализира с 3, а ParentID на 3-ти запис се актуализира със запис номер 2.
-
Забележка: Не предполагайте, че подредените по този начин елементи трябва да са един до друг.
- След промените в записите запазете таблицата и отворете frmSample, за да видите промените. Вашият дисплей TreeView трябва да изглежда като изображението, дадено по-долу, с всички възли в разгъната форма.
TreeView Control има свой собствен лист със свойства и настройките влияят на външния му вид. Така че ще направим промяна в едно от неговите свойства и ще се върнем, за да прегледаме TreeView отново.
Настройките в този лист със свойства променят външния вид на дисплея TreeView.
Горната част на лявата страна на свойството Стил вече е зададен с максималните налични функции Опция-7 (tvwTreeLinesPlusMinusPictureText).
Дъщерският възел на възел на коренно ниво може да бъде родителски възел за собственото си дете или деца. По този начин може да премине няколко стъпки надолу по дървото.
Променете другите две групи от ParentID на Child Node стойностите на полето да изглеждат като изображението, дадено по-горе.
РЕЧНИК ОБЕКТ
- Основи на обектите на речника
- Основи на обекта на речника-2
- Сортиране на ключове и елементи в речника
- Показване на записи от речника
- Добавяне на обекти на клас като елементи от речника
- Актуализиране на елемент от речника за обект на клас