用笨办法,做菜单目录树,属于“盲打”,又不知道总共有多少层级。
下面这一小段,改一下层级,只管往下续,比实际层级多了,也不会出错,所谓“油多不坏菜”。
If lst.Contains(itm2.Gettype.Name) Then
For Each itm3 As RibbonMenu.RibbonItem In RibbonTabs(rtb.Name)(grp.Name)(itm.Name)(itm1.Name)(itm2.Name).Items
If tv.Nodes(rtb.Name).Nodes(grp.Name).Nodes(itm.Name).Nodes(itm1.Name).Nodes(itm2.Name).Nodes.Contains(itm3.Name) = False Then
tv.Nodes(rtb.Name).Nodes(grp.Name).Nodes(itm.Name).Nodes(itm1.Name).Nodes(itm2.Name).Nodes.Add(itm3.Name)
End If
Next
End If
这下面是完整代码:
Dim tv As WinForm.TreeView = e.Form.Controls("TreeView1")
tv.Nodes.Clear
For Each rtb As RibbonMenu.Tab In RibbonTabs
If tv.Nodes.Contains(rtb.Name) = False
tv.Nodes.Add(rtb.Name)
End If
For Each grp As RibbonMenu.Group In rtb.Groups
If tv.Nodes(rtb.Name).Nodes.Contains(grp.Name) = False Then
tv.Nodes(rtb.Name).Nodes.Add(grp.Name)
End If
For Each itm As RibbonMenu.RibbonItem In grp.Items
If tv.Nodes(rtb.Name).Nodes(grp.Name).Nodes.Contains(itm.Name) = False Then
tv.Nodes(rtb.Name).Nodes(grp.Name).Nodes.Add(itm.Name)
End If
Dim str As String = "ComboBox,SplitButton,ToggleGroup,ToolBar,FontComboBox,MenuButton"
Dim lst As New List(Of String)
lst.AddRange(str.Split(","))
If lst.Contains(itm.Gettype.Name) Then
For Each itm1 As RibbonMenu.RibbonItem In RibbonTabs(rtb.Name)(grp.Name)(itm.Name).Items
If tv.Nodes(rtb.Name).Nodes(grp.Name).Nodes(itm.Name).Nodes.Contains(itm1.Name) = False Then
tv.Nodes(rtb.Name).Nodes(grp.Name).Nodes(itm.Name).Nodes.Add(itm1.Name)
End If
If lst.Contains(itm1.Gettype.Name) Then
For Each itm2 As RibbonMenu.RibbonItem In RibbonTabs(rtb.Name)(grp.Name)(itm.Name)(itm1.Name).Items
If tv.Nodes(rtb.Name).Nodes(grp.Name).Nodes(itm.Name).Nodes(itm1.Name).Nodes.Contains(itm2.Name) = False Then
tv.Nodes(rtb.Name).Nodes(grp.Name).Nodes(itm.Name).Nodes(itm1.Name).Nodes.Add(itm2.Name)
End If
If lst.Contains(itm2.Gettype.Name) Then
For Each itm3 As RibbonMenu.RibbonItem In RibbonTabs(rtb.Name)(grp.Name)(itm.Name)(itm1.Name)(itm2.Name).Items
If tv.Nodes(rtb.Name).Nodes(grp.Name).Nodes(itm.Name).Nodes(itm1.Name).Nodes(itm2.Name).Nodes.Contains(itm3.Name) = False Then
tv.Nodes(rtb.Name).Nodes(grp.Name).Nodes(itm.Name).Nodes(itm1.Name).Nodes(itm2.Name).Nodes.Add(itm3.Name)
End If
Next
End If
Next
End If
Next
End If
Next
Next
Next