Imports System.Collections.Generic
Imports Infragistics.Win
Imports Infragistics.Win.Misc.UltraWinTree
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Set the SelectionBehavior property to 'ExtendedAcrossCollections'
' to allow nodes from different collections to be selected concurrently.
Me.ultraTree1.SelectionBehavior = SelectionBehavior.ExtendedAcrossCollections
' Add nodes to the tree
Me.PopulateTree(Me.ultraTree1)
' Determine the deepest level
Dim deepestLevel As Integer = Me.GetDeepestLevel(Me.ultraTree1)
' Only allow selection of leaf nodes
Me.AllowSelectionOnLevel(Me.ultraTree1, deepestLevel)
End Sub
Private Sub PopulateTree(ByVal treeControl As UltraTree)
Try
treeControl.BeginUpdate()
treeControl.Nodes.Clear()
Dim i As Integer
For i = 0 To 2
Dim text As String = String.Format("Root {0}", i)
Dim rootNode As UltraTreeNode = treeControl.Nodes.Add(Nothing, text)
Me.PopulateNodes(rootNode.Nodes, 1)
Next
Finally
treeControl.EndUpdate()
End Try
treeControl.ExpandAll()
End Sub
Private Sub PopulateNodes(ByVal nodesCollection As TreeNodesCollection, ByVal level As Integer)
If (level > 3) Then Return
Dim parentNode As UltraTreeNode = nodesCollection.ParentNode
Dim i As Integer
For i = 0 To 2
Dim text As String = String.Format("{0}\Node {1}", parentNode.Text, i)
Dim node As UltraTreeNode = nodesCollection.Add(Nothing, text)
If (level < 3) Then
Me.PopulateNodes(node.Nodes, level + 1)
End If
Next
End Sub
Public Sub AllowSelectionOnLevel(ByVal tree As UltraTree, ByVal level As Integer)
Dim levels As New List(Of Integer)
levels.Add(level)
Me.AllowSelectionOnLevels(tree, levels)
End Sub
Public Sub AllowSelectionOnLevels(ByVal tree As UltraTree, ByVal levels As List(Of Integer))
Dim deepestLevel As Integer = Me.GetDeepestLevel(tree)
Dim i As Integer
For i = 0 To deepestLevel
tree.NodeLevelOverrides(i).ResetSelectionType()
If (levels.Contains(i)) Then Continue For
tree.NodeLevelOverrides(i).SelectionType = SelectType.None
Next
End Sub
Public Function GetDeepestLevel(ByVal tree As UltraTree) As Integer
Dim deepestLevel As Integer = 0
Me.GetDeepestLevel(tree.Nodes, deepestLevel)
Return deepestLevel
End Function
Private Sub GetDeepestLevel(ByVal nodes As TreeNodesCollection, ByRef deepestLevel As Integer)
Dim i As Integer
For i = 0 To nodes.Count - 1
Dim node As UltraTreeNode = nodes(i)
If (i = 0) Then deepestLevel = Math.Max(deepestLevel, node.Level)
If (node.HasNodes) Then Me.GetDeepestLevel(node.Nodes, deepestLevel)
Next
End Sub