Procedura: aggiungere comandi a menu di scelta rapida in Word

In questo esempio viene illustrato come aggiungere un comando a un menu di scelta rapida in Word tramite un componente aggiuntivo a livello di applicazione. Il menu di scelta rapida viene visualizzato quando si fa clic con il pulsante destro del mouse in un documento.

Si applica a: le informazioni fornite in questo argomento sono valide per i progetti a livello di documento e di applicazione per Word 2007 e Word 2010. Per ulteriori informazioni, vedere Funzionalità disponibili in base ai tipi di progetto e applicazioni di Office.

Aggiungere il codice seguente alla classe ThisAddIn in un progetto di componente aggiuntivo a livello di applicazione per Word. Per eseguire questo codice, è necessario che un modello di Word denominato MyCustomTemplate.dotx sia presente nella cartella Documenti (sia per Windows XP e versioni precedenti sia per le versioni di Windows più recenti).

Esempio

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");
}

Programmazione efficiente

È necessario impostare la proprietà Tag dei controlli quando si aggiungono gestori eventi. La proprietà Tag è utilizzata da Office per tenere traccia dei gestori eventi per uno specifico controllo CommandBarControl. Se la proprietà Tag viene lasciata vuota, gli eventi non verranno gestiti correttamente.

Dichiarare le variabili di menu a livello di classe anziché all'interno del metodo in cui sono chiamate. In questo modo, le variabili resteranno nell'ambito per tutta la durata dell'esecuzione dell'applicazione. In caso contrario, l'elemento verrà rimosso dalla procedura di Garbage Collection e il codice del gestore eventi smetterà di funzionare.

Ogni volta che si aggiunge o si rimuove un comando, impostare la proprietà CustomizationContext dell'oggetto Application sullo stesso documento o modello.

Vedere anche

Attività

Procedura: creare barre degli strumenti di Office

Procedura dettagliata: creazione di menu di scelta rapida per segnalibri

Procedura: aggiungere comandi a menu di scelta rapida in Excel

Procedura: aggiungere voci di menu e menu personalizzati a Outlook

Procedura: aggiungere icone personalizzate a voci di menu e barre degli strumenti

Concetti

Parametri facoltativi nelle soluzioni Office

Altre risorse

Personalizzazione dell'interfaccia utente di Office