Como: Adicionar comandos aos Menus de atalho no Word

Este exemplo demonstra como adicionar um comando em um menu de atalho no Word usando um suplemento em nível de aplicativo. O menu de atalho aparece quando o botão direito do mouse um documento.

Aplicável a: As informações neste tópico se aplicam a projetos de nível de documento e projetos de nível de aplicativo para Word 2007 e Word 2010. Para obter mais informações, consulte Recursos disponíveis pelo aplicativo do Office e o tipo de projeto.

Adicione o seguinte código para o ThisAddIn a classe em um nível de aplicativo suplemento do projeto para o Word. Para executar esse código, um modelo do Word chamado MyCustomTemplate.dotx deve estar localizado na pasta Meus documentos (para Windows XP e versões anteriores) ou a pasta de documentos (para versões mais recentes do Windows).

Exemplo

Private MyApplication As Word.Application
Private WithEvents myControl As Office.CommandBarButton
Private customTemplate As Word.Template

Private Sub ThisAddIn_Startup _
(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup

    MyApplication = Me.Application

    GetCustomTemplate()
    RemoveExistingMenuItem()
    AddMenuItem()

End Sub

Private Sub GetCustomTemplate()
    Dim TemplatePath As String = Environment.GetFolderPath _
        (Environment.SpecialFolder.MyDocuments) + "\MyCustomTemplate.dotx"
    Dim install As Boolean = True

    For Each installedTemplate As Word.Template In MyApplication.Templates
        If installedTemplate.FullName = DirectCast(TemplatePath, String) Then
            install = False
        End If
    Next

    If install = True Then
        MyApplication.AddIns.Add(TemplatePath.ToString(), True)
    End If
    customTemplate = MyApplication.Templates.Item(TemplatePath)
End Sub

Private Sub RemoveExistingMenuItem()

    Dim contextMenu As Office.CommandBar = _
    MyApplication.CommandBars("Text")

    MyApplication.CustomizationContext = customTemplate

    Dim control As Office.CommandBarButton = contextMenu.FindControl _
        (Office.MsoControlType.msoControlButton, System.Type.Missing, _
         "MyMenuItem", True, True)

    If Not (control Is Nothing) Then
        control.Delete(True)
    End If

End Sub

Private Sub AddMenuItem()

    MyApplication.CustomizationContext = customTemplate

    Dim menuItem As Office.MsoControlType = _
        Office.MsoControlType.msoControlButton

    myControl = CType(MyApplication.CommandBars("Text").Controls.Add _
       (menuItem, 1, True), Office.CommandBarButton)

    myControl.Style = Office.MsoButtonStyle.msoButtonCaption
    myControl.Caption = "My Menu Item"
    myControl.Tag = "MyMenuItem"
    customTemplate.Saved = True

    GC.Collect()

End Sub


Sub myControl_Click(ByVal Ctrl As Microsoft.Office.Core.CommandBarButton, _
                    ByRef CancelDefault As Boolean) Handles myControl.Click

    System.Windows.Forms.MessageBox.Show("My Menu Item clicked")

End Sub
private Word.Application myApplication;
private Office.CommandBarButton myControl;
private Word.Template customTemplate; 

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    myApplication = this.Application;

    GetCustomTemplate();
    RemoveExistingMenuItem();
    AddMenuItem(); 
}

private void GetCustomTemplate()
{
    object TemplatePath = Environment.GetFolderPath
        (Environment.SpecialFolder.MyDocuments) + 
        "\\MyCustomTemplate.dotx";
    object install = true;

    foreach (Word.Template installedTemplate in myApplication.Templates)
    {
        if (installedTemplate.FullName == (string)TemplatePath)
        {
            install = false;
        }
    }
    if ((bool)install)
    {
        myApplication.AddIns.Add(TemplatePath.ToString(), ref install);
    }
    customTemplate = myApplication.Templates.get_Item(ref TemplatePath);

}

private void RemoveExistingMenuItem()
{
    Office.CommandBar contextMenu = myApplication.CommandBars["Text"];
    myApplication.CustomizationContext = customTemplate;

    Office.CommandBarButton control = 
        (Office.CommandBarButton)contextMenu.FindControl
        (Office.MsoControlType.msoControlButton, missing,
        "MyMenuItem", true, true);

    if ((control != null))
    {
        control.Delete(true);
    }

}

private void AddMenuItem()
{
    myApplication.CustomizationContext = customTemplate;
    Office.MsoControlType menuItem = 
        Office.MsoControlType.msoControlButton;

    myControl = 
        (Office.CommandBarButton)myApplication.CommandBars["Text"].Controls.Add
        (menuItem,missing, missing, 1, true);

    myControl.Style = Office.MsoButtonStyle.msoButtonCaption;
    myControl.Caption = "My Menu Item";
    myControl.Tag = "MyMenuItem";

    myControl.Click += 
        new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler
            (myControl_Click);

    customTemplate.Saved = true;

    GC.Collect();

}


void myControl_Click(Microsoft.Office.Core.CommandBarButton Ctrl, 
    ref bool CancelDefault)
{
    System.Windows.Forms.MessageBox.Show("My Menu Item clicked");
}

Programação robusta

Você deve definir o Tag propriedade de seus controles quando você adicionar manipuladores de eventos. Office usa o Tag propriedade para controlar os manipuladores de eventos para uma determinada CommandBarControl. Se a Tag propriedade estiver em branco, os eventos não forem controlados adequadamente.

Declare as variáveis de menu no nível de classe em vez de dentro do método onde eles são chamados. Isso garante que as variáveis de menu permanecerá no escopo, contanto que o aplicativo é executado. Caso contrário, o item é removido pela coleta de lixo e o código de manipulador de eventos pára de funcionar.

Definir o CustomizationContext propriedade da Application o objeto para o mesmo documento ou modelo toda vez que você adicionar ou remove um comando.

Consulte também

Tarefas

Como: Criar barras de ferramentas do Office

Demonstra Passo a passo: A criação de Menus de atalho para indicadores

Como: Adicionar comandos aos Menus de atalho no Excel

Como: Adicionar itens de Menu e Menus personalizados para o Outlook

Como: Adicionar ícones personalizados para os itens de Menu e barra de ferramentas

Conceitos

Parâmetros opcionais em soluções do Office

Outros recursos

Personalização de interface do usuário do Office