Программная навигация через контекстное меню в .NET WinForms Framework 2.0 - PullRequest
1 голос
/ 19 декабря 2008

У меня есть приложение Windows Forms, написанное на VB.NET framework 2.0.

У меня есть сетка, с которой связано контекстное меню со следующей структурой:

MenuItem1
MenuItem2 -->
             SubMenuItem1
             SubMenuItem2 -->
                             SubSubMenuItem1
MenuItem3
...

Я хочу отображать контекстное меню, когда в сетке нажимается определенная клавиша, и программно выбирается 'SubMenuItem1'.

Я могу отобразить контекстное меню, вызвав метод Show () для элемента контекстного меню из события KeyUp сетки следующим образом:

contextMenu.Show(MainForm.GetSingleton(), Cursor.Position)

Однако я не могу понять, как программно выбрать элемент в подменю или подменю.

Может кто-нибудь помочь?

1 Ответ

1 голос
/ 19 декабря 2008

Это может быть самый уродливый кусок кода, если через пять минут кто-то обнаружит что-то вроде: 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, и он должен выглядеть просто отлично

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...