1

我有一个用 VB.NET 框架 2.0 编写的 Windows 窗体应用程序。

我有一个具有以下结构的关联上下文菜单的网格:

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

我希望在网格中按下特定键时显示上下文菜单,并以'SubMenuItem1'编程方式进行选择。

KeyUp我可以通过以下方式从网格事件中调用上下文菜单项上的 Show() 方法来显示上下文菜单:

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

但是,我无法弄清楚如何以编程方式选择子菜单或子子菜单中的项目。

任何人都可以帮忙吗?

4

1 回答 1

1

如果有人在五分钟内出现类似以下内容的代码,这可能是最大最丑陋的代码: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 中,它应该看起来还不错

于 2008-12-19T09:24:02.573 回答