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