2008-12-19 7 views
1

J'ai une application Windows Forms, écrite dans VB.NET framework 2.0.Navigation programmée via un menu contextuel dans .NET WinForms Framework 2.0

I ont une grille qui comporte un menu de contexte associé à la structure suivante:

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

je souhaite afficher le menu de contexte quand une touche particulière est enfoncée dans la grille, et ont la 'SubMenuItem1' sélectionné par programme.

je peux afficher le menu contextuel en invoquant la méthode sur l'élément de menu contextuel de l'événement KeyUp de la grille Show() de la manière suivante:

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

Je ne peux cependant comprendre comment sélectionner programme un élément du sous-menu ou du sous-menu.

Quelqu'un peut-il aider?

Répondre

1

Cela peut être le code de code le plus laid si quelqu'un apparaît dans cinq minutes avec quelque chose comme: ToolStripMenuItem8.selectAllParents(). Mais autant que je pouvais voir il n'y avait aucune fonction comme ça.

Voici donc ce que je pouvais venir avec:

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 

Et puis appelez le sous:

openTSMitem(ContextMenuStrip1, ToolStripMenuItem8) 

Hope it helps.

Edit: Je viens de voir que les commentaires et le code ont montré un peu mélangé dans la réponse, il suffit de coller dans Visual Studio cependant, et il devrait ressembler très bien

+0

Merci. Je vais y jeter un coup d'œil, mais il me faudra peut-être un jour ou deux pour le faire. – Jayden

+0

Cela fonctionne très bien. Je n'avais pas utilisé ContextMenuStrip, mais plutôt le contrôle ContextMenu (ce projet a été mis à niveau à partir d'un projet .NET 1.1). J'ai maintenant converti des menus à ces types de contrôles pour en tirer parti car les anciens ContextMenuItems n'ont pas la méthode ShowDropDown(). Merci! – Jayden

Questions connexes