Это может быть самый уродливый кусок кода, если через пять минут кто-то обнаружит что-то вроде: ToolStripMenuItem8.selectAllParents (). Но, насколько я мог видеть, такой функции не было.
Итак, вот что я могу придумать:
Private Sub openTSMitem(ByVal menu As ContextMenuStrip, ByVal selectitem As ToolStripMenuItem)
'The menu needs to be open befor we call ShowDropDown
menu.Show()
'The list will first contain the parents in the order of bottom to top
'then we will reverse it so we can open the submenus from top to bottom
'otherwise it will not open them all
Dim parentsRevOrder As ArrayList = New ArrayList()
'Add the parents to the list
Dim parentItem As ToolStripMenuItem = selectitem.OwnerItem
While Not parentItem Is Nothing
parentsRevOrder.Add(parentItem)
parentItem = parentItem.OwnerItem
End While
'reverse the list. now its in the order top to bottom
'and the submenus will open correctly
parentsRevOrder.Reverse()
'now loop through and open the submenus
For Each tsiParent As ToolStripMenuItem In parentsRevOrder
tsiParent.ShowDropDown()
Next
'and finally select the menuItem we want
selectitem.Select()
End Sub
А затем вызвать подпункт:
openTSMitem(ContextMenuStrip1, ToolStripMenuItem8)
Надеюсь, это поможет.
Редактировать: я только что увидел, что комментарии и код оказались немного смешанными в ответе, просто вставьте его в Visual Studio, и он должен выглядеть просто отлично