2010-05-19 9 views
7

Witam, tworzę przedłużenie do studia wizualnego i konkretną rzeczą, której potrzebuję, jest pobranie wybranego tekstu okna edytora do dalszego przetwarzania. Ktoś wie, co to ma interfejs lub usługa? Poprzednio muszę znaleźć ścieżkę otwartego rozwiązania i dlatego proszę o usługę implementującą IVsSolution, więc dla tego drugiego problemu muszę wiedzieć, że musi istnieć jakaś usługa, która dostarcza mi tych informacji.Pobierz zaznaczony tekst okna edytora. Wizualne rozszerzenie studyjne

Odpowiedz

3

wewnątrz OnlayoutChanged poniższy kod pojawi się komunikat z kodem wybrany:

if (_view.Selection.IsEmpty) 
     { 
      return; 
     } 
     else 
     { 
      string selectedText = _view.Selection.StreamSelectionSpan.GetText(); 

      MessageBox.Show(selectedText); 
     } 

nigdzie indziej po prostu uzyskać viewhost i Jego _view typu (IWpfTextView)

10

Aby wyjaśnić " po prostu uzyskaj widok "w odpowiedzi Stackera, tutaj jest pełny kod, w jaki sposób można uzyskać aktualny widok edytora, a stamtąd ITextSelection, z dowolnego miejsca w VSPackage Visual Studio 2010. W szczególności użyłem tego, aby pobrać aktualny wybór z wywołania polecenia menu.

IWpfTextViewHost GetCurrentViewHost() 
{ 
    // code to get access to the editor's currently selected text cribbed from 
    // http://msdn.microsoft.com/en-us/library/dd884850.aspx 
    IVsTextManager txtMgr = (IVsTextManager)GetService(typeof(SVsTextManager)); 
    IVsTextView vTextView = null; 
    int mustHaveFocus = 1; 
    txtMgr.GetActiveView(mustHaveFocus, null, out vTextView); 
    IVsUserData userData = vTextView as IVsUserData; 
    if (userData == null) 
    { 
     return null; 
    } 
    else 
    { 
     IWpfTextViewHost viewHost; 
     object holder; 
     Guid guidViewHost = DefGuidList.guidIWpfTextViewHost; 
     userData.GetData(ref guidViewHost, out holder); 
     viewHost = (IWpfTextViewHost)holder; 
     return viewHost; 
    } 
} 


/// Given an IWpfTextViewHost representing the currently selected editor pane, 
/// return the ITextDocument for that view. That's useful for learning things 
/// like the filename of the document, its creation date, and so on. 
ITextDocument GetTextDocumentForView(IWpfTextViewHost viewHost) 
{ 
    ITextDocument document; 
    viewHost.TextView.TextDataModel.DocumentBuffer.Properties.TryGetProperty(typeof(ITextDocument), out document); 
    return document; 
} 

/// Get the current editor selection 
ITextSelection GetSelection(IWpfTextViewHost viewHost) 
{ 
    return viewHost.TextView.Selection; 
} 

Oto docs MSDN dla IWpfTextViewHost, ITextDocument i ITextSelection.