Курсовая работа: Разработка модуля для контура управления tic-104
LoadTreeViewNodes Enterprise.PIModules, EnterpriseNode, i
EnterpriseNode.Expanded = True
End Sub
Private Sub LoadTreeViewNodes(Modules As PIModules, ParentNode As Node, i As Long)
Dim Module As PIModule
Dim SubNode As Node
DimstrKeyAsString
‘ свойство “Key” узла должно быть уникальным. Поскольку модули могут одновременно присутствовать в нескольких разных местах,
‘ нельзя полагаться на уникальный идентификатор модуля. По этой причине мы добавим целое число к уникальному ID
For Each Module In Modules
i = i + 1
strKey = Module.UniqueID & “-“ & i
Set SubNode = tvwEnterprise.nodes.Add(ParentNode, tvwChild, strKey, Module.Name)
LoadTreeViewNodes Module.PIModules, SubNode, i ‘ рекурсивныйвызовметодовявляетсянаилучшимспособомобработкииерархий
NextModule
EndSub
Большую часть работы выполняет код, обрабатывающий выбор узла. Этот код должен найти модуль, связанный с данным узлом, и затем обновить экран, если это контроллер.
Значение node.text совпадает с именем модуля. Используемый метод заключается в том, чтобы пройти вверх по иерархии к родителям узла, создавая массив узлов, а затем пройти вниз по массиву, используя свойство node.text, чтобы получить элемент модуля. Другой способ, который можно было бы здесь применить, состоит в том, чтобы хранить каждый модуль в этом дереве. Однако, этот подход не очень хорошо масштабируется.
Вот код, который это выполняет:
Private Sub tvwEnterprise_NodeClick(ByVal Node As MSComctlLib.Node)
Dim Module As PIModule
Dim i As Long
Dim ParentNodes(20) As Node
i = 1
Set ParentNodes(i) = Node.Parent
On Error GoTo Done
WhileTrue
i = i + 1
‘ следующая строка приведет к ошибке после нахождения последнего родителя, после чего произойдет переход к метке “Done”