получить выделенный текст из окна редактора .. визуальное расширение студии - PullRequest
8 голосов
/ 19 мая 2010

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

Ответы [ 2 ]

11 голосов
/ 26 июля 2011

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

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 .

3 голосов
/ 06 сентября 2010

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

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

В другом месте, просто получите видовой объект и его _view типа IWpfTextView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...