Въведение.
В тази сесия на урока за контрол на TreeView ще използваме два подформуляра заедно с контролата TreeView в главния формуляр frmTreeViewtab . Импортирахме контролата ImageList с предварително заредените изображения от нашия по-ранен демонстрационен проект.Ще използваме същата lvCategory и lvПродукти Таблици, които сме използвали за предишните си проекти.
lvCategory Първичен ключ на таблицата Стойностите на поле (CID) и поле за описание (Категория) са ключ на метода TreeView Nodes Add() и Текст стойности на параметрите, съответно.
Продуктите lvProducts Таблицата съдържа подробна информация за всеки продукт, като код на продукта, описание на складово-единично количество и каталожна цена.
Освен това, lvProducts таблицата има ParentID поле, което се актуализира със стойността на кода на категорията (CID). Всички артикули на продукти, които принадлежат към определена категория, се актуализират със стойността на полето CID (ID на категория) в полето ParentID. По този начин и двете таблици имат връзката главен-дете.
Записите за продукти имат две подформуляри на контролните страници на раздела. Първата страница съдържа данните Преглед подформуляр и втората страница има Редактиране подформуляр. Страницата за контрол на първия раздел показва всички записи на продукти, които принадлежат към определена категория на TreeView Control. Първите записи на подформуляр се показват за преглед и за избор на конкретен запис за редактиране във втория подформуляр.
Натоката запис или избран от потребителя записът в първия подформуляр е достъпен за редактиране във втория подформуляр, на втората страница на контролния раздел . Ключовите полета, маркирани със сив цвят, са заключени и не могат да бъдат редактирани.
Изглед на дърво с изглед за проектиране на подформуляри.
Изгледът за проектиране на формата frmTreeViewTab е даден по-долу:
Първите две необвързани текстови полета в основния формуляр се актуализират, когато потребителят избере елемент от категорията от контролата TreeView.
Третото необвързано текстово поле (име p_ID) първоначално се актуализира със стойността на уникалния идентификатор (PID) на първия запис на продукта, в противен случай стойността на избрания от потребителя запис се актуализира. Избраният запис на продукт в първия подформуляр е наличен във втория подформуляр за модификации.
Връзки към по-ранни учебни сесии.
По-ранните връзки към сесията на урока са дадени по-долу за лесна справка:
- Урок за контрол на Microsoft TreeView
- Създаване на меню за достъп с TreeView Control
- Присвояване на изображения към TreeView Control
- Присвояване на изображения към TreeView Control-2
- TreeView Control Маркирайте отметка за добавяне на изтриване на възли
- DreeView ImageCombo падащо меню за достъп
- Пренаредете възлите на TreeView чрез плъзгане и пускане
- ListView Control с MS-Access TreeView
- ListView Control Drag Drop Events
CatId необвързаното текстово поле е [Link Master Fields] Стойност на свойството на първия подформуляр.
Кодът на продукта в третото необвързано текстово поле (p_ID ) е свързан с [Link Master Fields] стойност на свойството на втория подформуляр в Изглед Раздел Страница.
p_ID Стойността на необвързаното текстово поле се актуализира, когато съдържанието на първия подформуляр се обнови или когато елемент е избран от потребителя.
Нормален изглед на екрана.
Нормалният изглед на frmTreeViewTab Формулярът е даден по-долу:

Ключовите полета в записа на продукта във втория подформуляр, със сив преден цвят, са заключени и нямат право да променят съдържанието.
Формулярът frmTreeViewTab VBA код на модула за клас:
Option Compare Database
Option Explicit
Dim tv As MSComctlLib.TreeView
Dim imgList As MSComctlLib.ImageList
Const Prfx As String = "X"
Private Sub Form_Load()
Dim db As DAO.Database
Dim tbldef As TableDef
'Initialize TreeView Nodes
Set tv = Me.TreeView0.Object
tv.Nodes.Clear
'Initialixe ImageList Object
Set imgList = Me.ImageList3.Object
'Modify TreeView Font Properties
With tv
.Font.Size = 9
.Font.Name = "Verdana"
.ImageList = imgList 'assign preloaded imagelist control
End With
LoadTreeView 'Create TreeView Nodes
End Sub
Private Sub LoadTreeView()
Dim Nod As MSComctlLib.Node
Dim strCategory As String
Dim strCatKey As String
Dim strProduct As String
Dim strPKey As String
Dim strBelongsTo As String
Dim strSQL As String
Dim db As DAO.Database
Dim rst As DAO.Recordset
'Initialize treeview nodes
tv.Nodes.Clear
strSQL = "SELECT lvCategory.CID, lvCategory.Category, "
strSQL = strSQL & "lvcategory.BelongsTo FROM lvCategory ORDER BY lvCategory.CID;"
Set db = CurrentDb
Set rst = db.OpenRecordset(strSQL, dbOpenSnapshot)
' Populate all Records as Rootlevel Nodes
Do While Not rst.BOF And Not rst.EOF
If rst.AbsolutePosition = 1 Then
Me![CatID] = rst![CID]
End If
strCatKey = Prfx & CStr(rst!CID)
strCategory = rst!Category
Set Nod = tv.Nodes.Add(, , strCatKey, strCategory, 1, 2)
Nod.Tag = rst!CID
rst.MoveNext
Loop
'In the second pass of the the same set of records
'Move Child Nodes under their Parent Nodes
rst.MoveFirst
Do While Not rst.BOF And Not rst.EOF
strBelongsTo = Nz(rst!BelongsTo, "")
If Len(strBelongsTo) > 0 Then
strCatKey = Prfx & CStr(rst!CID)
strBelongsTo = Prfx & strBelongsTo
strCategory = rst!Category
Set tv.Nodes.Item(strCatKey).Parent = tv.Nodes.Item(strBelongsTo)
End If
rst.MoveNext
Loop
rst.Close
TreeView0_NodeClick tv.Nodes.Item(1)
End Sub
Private Sub TreeView0_NodeClick(ByVal Node As Object)
Dim Cat_ID As String
'Initialize hidden unbound textbox 'Link Master Field' values
Cat_ID = Node.Tag
Me!CatID = Cat_ID
Me![xCategory] = Node.Text
End Sub
Private Sub cmdExit_Click()
DoCmd.Close
End Sub
Тъй като използването на TreeView Control и ImageList Control и тяхното функциониране бяха обяснени подробно в по-ранните сесии, ще откриете, че само някои от тези по-ранни VBA подпрограми се появяват в горния модул за формуляр.
Досега сме проектирали няколко екрана с MS-Access TreeView, ListView, ImageList и ImageCombo Control и се надявам, че ще ги намерите като добра отправна точка за вашия собствен дизайн на интерфейса на проекта.
Проблеми с версията на MS-Office за TreeView Control.
Ако сте имали проблеми при стартирането на демонстрационната база данни във вашата версия на Microsoft Access, можете да се обърнете към следната връзка за някои коригиращи действия, които може да са полезни за решаване на проблема ви:
По-рано горните контроли не работеха под 64-битови системи. Но през септември 2017 г. Microsoft пусна актуализация на библиотеката MSCOMCTL.OCX и следното извлечение от документа на Microsoft е дадено по-долу за ваша информация:
Щракнете върху изображението на документа по-горе за пълния текст на документа за актуализация за 2017 г.:1707. Следната връзка предлага някои полезни съвети.- РЕШЕН MSCOMCTL.OCX ЗА ИЗТЕГЛЯНЕ РЕГИСТРЪТ 64 БИТОВ ПРОЗОР
С използването на горните контролни обекти TreeView можем да изградим по-добре изглеждащи и по-ефективни потребителски интерфейси за нашите нови проекти.
Изтеглете демонстрационната база данни.