Condividi tramite


Algoritmo di routing dei comandi

In Visual Studio i controlli vengono gestiti da una serie di componenti diversi. I controlli vengono gestiti dal contesto più interno, basato sulla selezione corrente, anche detta globale) al contesto più esterno. Per ulteriori informazioni, vedere Disponibilità del comando.

Ordine di risoluzione di comando

I controlli vengono passati tra i livelli seguenti di controllo il contesto:

  1. i componenti aggiuntivi: L'ambiente innanzitutto offre il comando a tutti i componenti aggiuntivi che è presente.

  2. Controlli di precedenza: Questi controlli sono registrati tramite IVsRegisterPriorityCommandTarget. Vengono chiamati per ogni comando in Visual Studio e vengono chiamati nell'ordine in cui sono stati registrati.

  3. Comandi del menu di scelta rapida: Un comando trova su un menu di scelta rapida in primo luogo viene offerto alla destinazione comando fornita dal menu di scelta rapida e dopo che il routing tipico.

  4. Destinazioni comando sulla barra degli strumenti: Queste destinazioni comando vengono registrate quando si chiama l'entity_M:Microsoft.VisualStudio.Shell.Interop.IVsUIShell4.SetupToolbar2(System.IntPtr, Microsoft.VisualStudio.Shell.Interop.IVsToolWindowToolbar, Microsoft.VisualStudio.OLE.Interop.IOleCommandTarget, Microsoft.VisualStudio.Shell.Interop.IVsToolWindowToolbarHost@) Il valore del parametro pCmdTarget può essere null. Se non è null, questa destinazione comando viene utilizzata per aggiornare tutti i controlli situati nella barra degli strumenti che si installa. Se la shell sta installando la barra degli strumenti, quindi passa la struttura della finestra come pCmdTarget in modo che tutti gli aggiornamenti dei controlli sulla barra degli strumenti attraversino la struttura della finestra, anche se non è dello stato attivo.

  5. Finestra degli strumenti: Le finestre degli strumenti, che in genere implementano l'interfaccia di IVsWindowPane , devono implementare anche l'interfaccia di IOleCommandTarget in modo da poter ottenere Visual Studio la destinazione comando quando la finestra degli strumenti della finestra attiva. Tuttavia, se la finestra degli strumenti attiva è la finestra di Progetto , il comando viene indirizzato all'interfaccia di IVsUIHierarchy che è il padre comune degli elementi selezionati. Se questa selezione si estende su più progetti, il comando viene indirizzato alla gerarchia di IVsSolution . The IVsUIHierarchy interface contains the QueryStatusCommand and ExecCommand methods that are analogous to the corresponding commands on the IOleCommandTarget interface.

  6. Finestra di documento: Se il comando fa il flag di RouteToDocs impostare nel file di .vsct, Visual Studio cerca una destinazione comando sull'oggetto del documento, un'istanza di un'interfaccia di IVsWindowPane o un'istanza di un oggetto del documento (in genere un'interfaccia di IVsTextLines o un'interfaccia di IVsTextBuffer ). Se l'oggetto visualizzato del documento non supporta il comando, Visual Studio è destinato al comando all'interfaccia di IOleCommandTarget restituita. Si tratta di un'interfaccia opzionale per gli oggetti dati del documento.)

  7. gerarchia corrente: La gerarchia corrente può essere il progetto proprietaria della finestra di documento attivo o la gerarchia selezionata in Esplora soluzioni. Visual Studio cerca l'interfaccia di IOleCommandTarget distribuita su corrente, o attivo, gerarchia. La gerarchia è necessario supportare i controlli che sono validi ogni volta che la gerarchia è attiva, anche se una finestra del documento di un elemento di progetto ha lo stato attivo. Tuttavia, i controlli che si applicano solo quando Esplora soluzioni ha lo stato attivo devono essere supportati tramite l'interfaccia di IVsUIHierarchy e il relativo QueryStatusCommand e metodi didi ExecCommand.

    tagliare, copia, Incolla, Elimina, rinominare, i controlli di Fare doppio clic su e di Immettererichiedono una gestione speciale. Per informazioni su come gestire Elimina e i comandi di rimuovere in gerarchie, vedere l'interfaccia di IVsHierarchyDeleteHandler .

  8. Global: Se il comando non è stato gestito dai contesti in precedenza, ma Visual Studio tenta di per il package VS che possiede un comando che implementa l'interfaccia di IOleCommandTarget . Se il package VS implementa una gerarchia del progetto, i metodi QueryStatusCommand and ExecCommand dell'interfaccia IVsUIHierarchy devono essere implementati anziché. Il package VS viene caricato solo quando il metodo di Exec viene chiamato.

Vedere anche

Altre risorse

Command Routing in VSPackages

Ordinare la progettazione