Dim toolsMenuName As String
Try
Dim resourceManager As System.Resources.ResourceManager = _
New System.Resources.ResourceManager("MyAddin.CommandBar", _
System.Reflection.Assembly.GetExecutingAssembly())
Dim cultureInfo As System.Globalization.CultureInfo = _
New System.Globalization.CultureInfo(_applicationObject.LocaleID)
toolsMenuName = resourceManager.GetString(String.Concat(cultureInfo.TwoLetterISOLanguageName, "Tools"))
Catch e As Exception
toolsMenuName = "Tools"
End Try
Dim commandBars As CommandBars = CType(_applicationObject.CommandBars, CommandBars)
Dim menuBarCommandBar As CommandBar = commandBars.Item("MenuBar")
Dim toolsControl As CommandBarControl = menuBarCommandBar.Controls.Item(toolsMenuName)
Dim toolsPopup As CommandBarPopup = CType(toolsControl, CommandBarPopup)
The approach used by the wizard requires a
CommandBar.resx resource file with localized names for every Visual Studio
international version. A more simple and
robust approach is shown here, which gets the commandbar associated to a
CommandBarControl using only English names, it doesn't require the CommandBar.resx
file and it works in all international versions of Visual Studio:
Dim objMenuBarCommandBar As CommandBar
Dim objToolsCommandBar As CommandBar
Dim objCommandBarControl As CommandBarControl
Dim objCommandBarPopup As CommandBarPopup
objMenuBarCommandBar = _applicationObject.CommandBars.Item("MenuBar")
For Each objCommandBarControl In objMenuBarCommandBar.Controls
If objCommandBarControl.Type = MsoControlType.msoControlPopup Then
objCommandBarPopup = DirectCast(objCommandBarControl, CommandBarPopup)
If objCommandBarPopup.CommandBar.Name = "Tools" Then ' English name
objToolsCommandBar = objCommandBarPopup.CommandBar
Exit For
End If
End If
Next