2010-07-02 2 views
3

J'écris mon propre extension. J'ai créé un bouton de barre d'outils. Le modèle que j'ai utilisé était « Visual Studio Package » et il y avait une option lors de l'assistant pour créer un bouton de commande (ou quelque chose comme ça)Visual Studio 2010 l'extension obtenir le texte sélectionné

Ainsi, le bouton affiche, mais je ne peux pas trouver comment obtenir le document actuel ou le texte sélectionné dans le document.

Toute aide serait appréciée.

Répondre

7

Il y a deux façons de l'aborder:

  1. poignée sur le bouton dans le monde et l'utilisation DTE pour obtenir le document en cours (DTE.ActiveDocument) et le texte sélectionné (((TextDocument)activeDoc).Selection.Text). Vous pouvez obtenir le plus haut niveau objet DTE dans votre package en écrivant: DTE dte = GetService(typeof(SDTE)) as DTE; Notez que le document actif peut être null.
  2. Créez un gestionnaire de commandes au niveau de l'éditeur pour gérer la commande donnée. L'extension Align Assignments que j'ai écrite (source) en est un exemple. Voici à quoi ressemble le command filter.
+0

Merci, l'ETTD ETTD = GetService (typeof (SDTE)) comme DTE; était exactement ce que j'étais après, je jouais avec le GetService. Y at-il une ressource qui énumère tout ce que vous pouvez y passer? et qu'est-ce qu'ils font tous? –

+1

Une astuce consiste à rechercher des interfaces telles que 'SDTE'; le "S" signifie "service", et est utilisé comme clé pour les objets bloqués dans le fournisseur de service. Jetez un coup d'œil à [cet espace de noms sur MSDN] (http://msdn.microsoft.com/en-us/library/bb164288.aspx) (faites défiler la page jusqu'à ce que vous trouviez les interfaces qui commencent par 'SVs'). –

+0

... Je devrais également mentionner: chacune de ces cartes à * au moins * une interface, bien que certains puissent en mapper plusieurs. Par exemple, 'SVsUIShell' correspond à' IVsUIShell', 'IVsUIShell2' ... à 4. –