I found out the solution Myself
Public Class Form1
Dim CurrentLevel As Integer
Dim MaxLevel As Integer
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
With TreeView1
.BeginUpdate()
.Nodes.Add("Account")
.Nodes(0).Nodes.Add("PORT: My Work Services")
.Nodes(0).Nodes(0).Nodes.Add("OFF: Global Field Services")
.Nodes(0).Nodes(0).Nodes(0).Nodes.Add("ITSVC: Moves")
.Nodes(0).Nodes(0).Nodes(0).Nodes.Add("ITSVC: Installs")
.Nodes(0).Nodes(0).Nodes(0).Nodes.Add("ITSVC: Maintenance")
.Nodes(0).Nodes(0).Nodes.Add("OFF: Service Desk")
.Nodes(0).Nodes(0).Nodes(1).Nodes.Add("ITSVC: Incident Management")
.Nodes(0).Nodes(0).Nodes(1).Nodes.Add("ITSVC: Change Management")
.Nodes(0).Nodes(0).Nodes(1).Nodes.Add("ITSVC: Problem Management")
.Nodes(0).Nodes.Add("PORT: Data Center")
.Nodes(0).Nodes(1).Nodes.Add("OFF: Mainframe")
.Nodes(0).Nodes(1).Nodes(0).Nodes.Add("ITSVC: Applications")
.Nodes(0).Nodes(1).Nodes(0).Nodes.Add("ITSVC: Database")
.Nodes(0).Nodes(1).Nodes(0).Nodes.Add("ITSVC: Web")
.Nodes(0).Nodes(1).Nodes.Add("OFF: Midrange")
.Nodes(0).Nodes(1).Nodes(1).Nodes.Add("ITSVC: App")
.Nodes(0).Nodes(1).Nodes(1).Nodes.Add("ITSVC: DB")
.Nodes(0).Nodes(1).Nodes(1).Nodes.Add("ITSVC: Internet")
.EndUpdate()
.Nodes(0).ExpandAll()
End With
MaxLevel = 3
CurrentLevel = 3
End Sub
' Call the procedure using the top nodes of the treeview.
Private Sub ExpandToLevel(Direction As String, Optional SpecificLevel As Integer = -1)
Dim Node As TreeNode
TreeView1.BeginUpdate() 'BeginUpdate() and EndUpdate() seems to be the equivalent of Tlist.Redraw = True and False
If SpecificLevel = -1 Then
Select Case Direction
Case "Expand"
If CurrentLevel < MaxLevel Then
CurrentLevel += 1
End If
Case "Collapse"
If CurrentLevel > 0 Then
CurrentLevel -= 1
End If
End Select
Else
CurrentLevel = SpecificLevel
End If
For Each Node In TreeView1.Nodes 'Always level 0
If CurrentLevel = 0 Then
Node.Collapse()
Else
Node.ExpandAll()
ExpandToLevelRecursive(Node)
End If
Next
TreeView1.EndUpdate()
End Sub
Private Sub ExpandToLevelRecursive(ByVal ParentNode As TreeNode)
Dim ChildNode As TreeNode
For Each ChildNode In ParentNode.Nodes
Debug.Print(ChildNode.Text)
If ChildNode.Level = CurrentLevel Then
ChildNode.Collapse()
Else
ExpandToLevelRecursive(ChildNode)
End If
Next
End Sub
Private Sub ExpandToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles ExpandToolStripMenuItem.Click
ExpandToLevel("Expand")
End Sub
Private Sub CollapseToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles CollapseToolStripMenuItem.Click
ExpandToLevel("Collapse")
End Sub
Private Sub AccountToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles AccountToolStripMenuItem.Click
ExpandToLevel("Not Used By the ExpandToLevel Sub", 0)
End Sub
Private Sub PortfolioToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles PortfolioToolStripMenuItem.Click
ExpandToLevel("Not Used By the ExpandToLevel Sub", 1)
End Sub
Private Sub OfferingToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles OfferingToolStripMenuItem.Click
ExpandToLevel("Not Used By the ExpandToLevel Sub", 2)
End Sub
Private Sub ITServiceToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles ITServiceToolStripMenuItem.Click
ExpandToLevel("Not Used By the ExpandToLevel Sub", 3)
End Sub
End Class