Condividi tramite


Procedura: esporre un componente aggiuntivo nel menu Strumenti (Visual C#)

Quando si crea un componente aggiuntivo utilizzando la Creazione guidata componente aggiuntivo e si seleziona l'opzione per visualizzarlo come comando, il comando viene incluso nel menu Strumenti per impostazione predefinita.Se si ignora questa opzione durante la creazione del componente aggiuntivo, è possibile eseguire nuovamente la Creazione guidata componente aggiuntivo, selezionare l'opzione e copiare il codice esistente nel nuovo componente aggiuntivo.

Se non è possibile eseguire questa operazione, l'alternativa consiste nell'utilizzare la routine riportata di seguito.

[!NOTA]

È possibile che le finestre di dialogo e i comandi di menu visualizzati siano diversi da quelli descritti nella Guida a seconda delle impostazioni attive o dell'edizione del programma.Queste procedure sono state sviluppate con le Impostazioni generali per lo sviluppo attive.Per modificare le impostazioni, scegliere Importa/EsportaImpostazioni dal menu Strumenti.Per ulteriori informazioni, vedere Impostazioni di Visual Studio.

Per aggiungere un comando di menu a un componente aggiuntivo esistente

  1. Aggiungere queste istruzioni using al file contenente la classe Connect.

    using Microsoft.VisualStudio.CommandBars;
    using System.Resources;
    using System.Reflection;
    using System.Globalization;
    using System.Windows.Forms;
    
  2. Modificare la dichiarazione della classe Connect in modo che implementi IDTCommandTarget.

  3. Sostituire o modificare il codice della routine OnConnection() come segue:

    public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        if(connectMode == ext_ConnectMode.ext_cm_UISetup)
        {
            object []contextGUIDS = new object[] { };
            Commands2 commands = (Commands2)_applicationObject.Commands;
            string toolsMenuName;
    
            try
            {
                ResourceManager resourceManager = new     
                  ResourceManager("MyAddin1.CommandBar",  
                  Assembly.GetExecutingAssembly());
                CultureInfo cultureInfo = new 
                  System.Globalization.CultureInfo
                  (_applicationObject.LocaleID);
                string resourceName = String.Concat(cultureInfo.
                  TwoLetterISOLanguageName, "Tools");
                toolsMenuName = resourceManager.GetString(resourceName);
            }
            catch
            {
                toolsMenuName = "Tools";
            }
    
            CommandBar menuBarCommandBar = 
              ((CommandBars)_applicationObject.CommandBars)
              ["MenuBar"];
    
              CommandBarControl toolsControl = 
                menuBarCommandBar.Controls[toolsMenuName];
              CommandBarPopup toolsPopup = 
                (CommandBarPopup)toolsControl;
    
              try
              {
                  Command command = commands.AddNamedCommand2
                    (_addInInstance, "MyAddin1", "MyAddin1", "Executes  
                    the command for MyAddin1", true, 59, ref 
                    contextGUIDS, (int)vsCommandStatus.
                    vsCommandStatusSupported+(int)vsCommandStatus.
                    vsCommandStatusEnabled, (int)vsCommandStyle.
                    vsCommandStylePictAndText, vsCommandControlType.
                    vsCommandControlTypeButton);
    
                  if((command != null) && (toolsPopup != null))
                  {
                         command.AddControl(toolsPopup.CommandBar, 1);
                  }
            }
            catch(System.ArgumentException)
            {
            }
        }
    }
    
  4. Aggiungere le due routine necessarie riportate di seguito, QueryStatus e Exec:

    public void QueryStatus(string commandName, 
      vsCommandStatusTextWanted neededText, ref vsCommandStatus status, 
      ref object commandText)
    {
        if(neededText == 
          vsCommandStatusTextWanted.vsCommandStatusTextWantedNone)
        {
            if(commandName == "MyAddin1.Connect.MyAddin1")
            {
                status = (vsCommandStatus)vsCommandStatus.
                  vsCommandStatusSupported|vsCommandStatus.
                  vsCommandStatusEnabled;
                return;
            }
        }
    }
    
    public void Exec(string commandName, vsCommandExecOption 
      executeOption, ref object varIn, ref object varOut, ref bool 
      handled)
    {
        handled = false;
        if(executeOption ==  
          vsCommandExecOption.vsCommandExecOptionDoDefault)
        {
            if(commandName == "MyAddin1.Connect.MyAddin1")
            {
                handled = true;
                    System.Windows.Forms.MessageBox.
                      Show("add-in running.");
                return;
            }
        }
    }
    

    Ogni volta che viene implementato l'oggetto IDTCommandTarget, è necessario aggiungere queste due routine.Un metodo rapido per eseguire questa operazione consiste nel selezionare l'oggetto IDTCommandTarget nella casella di riepilogo a discesa Nome classe nell'angolo superiore sinistro dell'editor.Selezionare ogni routine dalla casella di riepilogo a discesa Nome metodo nell'angolo superiore destro.In questo modo, vengono create le necessarie routine vuote con i parametri corretti ai quali sarà possibile aggiungere il codice.

    La routine Exec viene chiamata quando un utente sceglie il comando di menu, pertanto è la posizione in cui è necessario inserire il codice che si desidera eseguire in quel momento.

Vedere anche

Attività

Procedura: esporre un componente aggiuntivo nel menu Strumenti (Visual Basic)

Procedura: controllare i componenti aggiuntivi tramite Gestione componenti aggiuntivi

Procedura: creare un componente aggiuntivo

Concetti

Grafico del modello a oggetti di automazione