2010-05-19 1 views
7

привет, я делаю расширение для визуальной студии, и мне нужна конкретная вещь, чтобы получить выделенный текст окон редактора для дальнейшей обработки. Кто-то знает, какой интерфейс или услуга имеет это? Раньше мне нужно было найти путь открытого решения, и для этого я обращаюсь к службе, которая реализует IVsSolution, поэтому для этой другой проблемы я хочу, чтобы какая-то служба предоставляла мне эту информацию.получить выделенный текст в окне редактора .. расширение викторианской области

ответ

3

внутри OnlayoutChanged следующий код выскочит сообщение с кодом выбранного:

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

      MessageBox.Show(selectedText); 
     } 

нигде просто получить viewhost и сво _view типа (IWpfTextView)

10

Для уточнения " просто получить viewhost "в ответе Штабера, вот полный код для того, как вы можете получить текущее представление редактора, а оттуда ITextSelection, из любого места в Visual Studio 2010 VSPackage. В частности, я использовал это, чтобы получить текущий выбор из обратного вызова команды меню.

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; 
} 

Вот документы MSDN для IWpfTextViewHost, ITextDocument и ITextSelection.

Смежные вопросы