How do I create menus and sub menus in VS2005? Microsoft Office CommandBars don't appear to work. You're right; VS2005 (Whidbey) has its own CommandBars so that you don't incur the overhead of carrying Office.dll around with your add-ins.
This article will show you how to create a context menu in the Code Window and add sub menus to it. For this article, I used the Add-In Wizard to create the basic Add-In, but I did not let it create a menu for me. I will create all the menus myself. I need to add one Namespace Import to the imports which will make them look like the following. The Namespace that I add is for the CommandBars. Note that it is now built into VisualStudio so that we don't need a reference to Microsoft.Office.
| Imports System Imports Microsoft.VisualStudio.CommandBars Imports Extensibility Imports EnvDTE Imports EnvDTE80 |
| ' object for the Code Window menu Private cmdbar As Microsoft.VisualStudio.CommandBars.CommandBar ' two popup menus, 1 for the code window Private popup As CommandBarPopup ' 1 for a sub menu which will contain two other sub menus Private popup2 As CommandBarPopup ' 3 sub menus, two will go on a sub menu and 1 on my main popup Private WithEvents mnuAbout As CommandBarButton Private WithEvents mnuSetup As CommandBarButton Private WithEvents mnuTest As CommandBarButton |
| Public Sub OnConnection(ByVal application As Object, _ ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object, _ ByRef custom As Array) Implements IDTExtensibility2.OnConnection Try oVS = CType(application, DTE2) _addInInstance = CType(addInInst, AddIn) CreateMenus() Catch ex As Exception MsgBox(ex.ToString) End Try End Sub |
| Private Sub CreateMenus() Try Dim nullParam As Object = Type.Missing ' create a popup menu on the Code Window popup menu cmdbar = CType(CType(oVS.CommandBars, CommandBars)("Code Window"), _ CommandBar) popup = CType(cmdbar.Controls.Add(MsoControlType.msoControlPopup, _ nullParam, nullParam, 2, nullParam), CommandBarPopup) popup.Caption = "Net Completer/VB" ' add another popup to my main popup popup2 = CType(popup.Controls.Add(MsoControlType.msoControlPopup, _ nullParam, nullParam, 1, nullParam), CommandBarPopup) popup2.Caption = "Misc" ' add two sub menus to the popup just created mnuAbout = CType(popup2.Controls.Add(MsoControlType.msoControlButton), _ CommandBarButton) mnuAbout.Caption = "About" mnuAbout.FaceId = 202 mnuSetup = CType(popup2.Controls.Add(MsoControlType.msoControlButton), _ CommandBarButton) mnuSetup.Caption = "Setup" mnuSetup.FaceId = 203 ' add a menu to the main menu of my addin mnuTest = CType(popup.Controls.Add(MsoControlType.msoControlButton), _ CommandBarButton) mnuTest.Caption = "Test" mnuTest.FaceId = 204 Catch ex As Exception MsgBox(ex.ToString()) End Try |
| Private Sub mnuAbout_Click(ByVal Ctrl As _ Microsoft.VisualStudio.CommandBars.CommandBarButton, _ ByRef CancelDefault As Boolean) Handles mnuAbout.Click MsgBox("About") End Sub Private Sub mnuSetup_Click(ByVal Ctrl As _ Microsoft.VisualStudio.CommandBars.CommandBarButton, _ ByRef CancelDefault As Boolean) Handles mnuSetup.Click MsgBox("Setup") End Sub Private Sub mnuTest_Click(ByVal Ctrl As _ Microsoft.VisualStudio.CommandBars.CommandBarButton, _ ByRef CancelDefault As Boolean) Handles mnuTest.Click MsgBox("Test Menu") End Sub |